我有一个可以捕获令牌并保存在缓存中的服务,我添加了如下所示的服务,但是当应用启动时,我需要做些什么才能在启动时触发该服务
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();
}
}
...
答案 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分钟触发一次
您可以做的是创建一个托管服务,立即注入令牌服务,并在需要时从托管服务中调用所需的功能。
框架工作将在启动过程中启动托管服务。