如何在startup.cs中运行/触发服务?

时间:2019-07-18 18:14:07

标签: .net asp.net-core .net-core asp.net-core-mvc asp.net-core-2.0

我有一个可以捕获令牌并保存在缓存中的服务,我添加了如下所示的服务,但是当应用启动时,我需要做些什么才能在启动时触发该服务

import 'package:rxdart/rxdart.dart';

class BlocC extends Bloc<CEvent, CState> {
  final BlocA a;
  final BlocB b;
  StreamSubscription<bool> _canUpdateCSubscription;

  BlocC({@required this.a, @required this.b}) {
    _canUpdateCSubscription = Observable.combineLatest2(
      a.state,
      b.state,
      (aState, bState) => aState is AUpdated && bState is BUpdated,
    ).listen(
      (canUpdateC) {
        if (canUpdateC) dispatch(UpdateC());
      },
    );
  }

  @override
  void dispose() {
    _canUpdateCSubscription?.cancel();
    _canUpdateCSubscription = null;
    super.dispose();
  }

  @override
  CState get initialState => CUpdating();

  @override
  Stream<CState> mapEventToState(CEvent event) async* {
    if (event is UpdateC) {
      yield* CUpdated();
    }
  }
...

2 个答案:

答案 0 :(得分:2)

调用services.AddScoped只是将其添加到服务集合中。结果没有任何反应,即不会自动新建实例并在其上运行某种方法。

如果您需要在启动时进行某些操作,则需要在Program.cs中进行实际操作:

public static void Main(string[] args)
{
    var host = CreateWebHostBuilder(args).Build();

    var tokenService = host.Services.GetRequiredService<ITokenService>();
    tokenService.DoSomething();

    host.Run();
}

答案 1 :(得分:2)

如果这是一项需要在后台运行的服务,请考虑将其与托管服务一起使用

引用Background tasks with hosted services in ASP.NET Core

  

我需要每50分钟触发一次

您可以做的是创建一个托管服务,立即注入令牌服务,并在需要时从托管服务中调用所需的功能。

框架工作将在启动过程中启动托管服务。