IHttpContextAccessor替代后台任务

时间:2018-03-19 07:47:47

标签: c# asp.net-core .net-core

我正在使用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,或者它是不可能的?

0 个答案:

没有答案