我正在使用ASP.net-core内置的DI并遇到以下问题:
使用单身商业逻辑与 Scoped DbContext(使用UnitOfWork模式),您需要有一个提供商,以获取您在互联网上找到的服务这个(src。:http://morgwai.pl/articles/aspdi.html):
public class Provider<T> : IProvider<T> {
IHttpContextAccessor contextAccessor;
public Provider(IHttpContextAccessor accessor) {
contextAccessor = accessor;
}
public T Get() {
return contextAccessor.HttpContext.RequestServices.GetService<T>();
}
}
这在BL中调用(BLService就像这样:
private IUnitOfWork UnitOfWork {
get {
return UnitOfWorkProvider.Get();
}
}
当使用带有HttpRequests的“普通”工作流程和控制器时,这很好用。但是在后台服务中使用它时,可以像这样创建自己的Scope:
using (IServiceScope scope = ServiceProvider.CreateScope()) {
IBLService blService = scope.ServiceProvider.GetService<IBLService>();
// Here comes the Null Reference Exception,
// because there is no HttpContext in the IHttpContextAccessor
result = await blService.GetAndUpdateEntityAsync();
}
这不起作用。这很明显,因为你没有HttpRequest。
的 FinalQuestion:
是否有类似于后台任务/服务的IHttpContextAccessor,或者它是不可能的?