Dependency injection WebBackgrounder+;尼尼特

Dependency injection WebBackgrounder+;尼尼特,dependency-injection,ninject,Dependency Injection,Ninject,有人有在库中使用依赖项注入的经验吗 特别是,我需要从作业中访问我的存储库,它们的生存期取决于任务的生存期。我最好避免财产注入 这是我在App_Start中的WebBackgrounder设置: public static class WebBackgrounderSetup { static readonly JobManager _jobManager = CreateJobWorkersManager(); public static void Start() {

有人有在库中使用依赖项注入的经验吗

特别是,我需要从作业中访问我的存储库,它们的生存期取决于任务的生存期。我最好避免财产注入

这是我在App_Start中的WebBackgrounder设置:

public static class WebBackgrounderSetup
{
    static readonly JobManager _jobManager = CreateJobWorkersManager();

    public static void Start()
    {
        _jobManager.Start();
    }

    public static void Shutdown()
    {
        _jobManager.Dispose();
    }

    private static JobManager CreateJobWorkersManager()
    {
        var jobs = new IJob[]
    {
        new TmdbJob(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(20))
    };

        var manager = new JobManager(jobs, new SingleServerJobCoordinator());
        manager.Fail(ex => Elmah.ErrorLog.GetDefault(null).Log(new Error(ex)));
        return manager;
    }
}

谢谢你的意见

我没有使用WebBackgrounder的经验,但建议与所有多线程应用程序相同。基本规则是:

  • 不要将服务(依赖项)传递给其他线程,因为服务依赖于(或可能依赖于)一个线程
  • 相反,在该线程的开头解析一个新的对象图
  • 对于具有特定于HttpContext的生存期或缓存(如每请求生活方式)并且需要在后台线程上可用的依赖项,您需要将其配置为hibrid生活方式(每请求和每线程)
  • 不要在每个线程上注册这些依赖项,因为ASP.NET可以在不同的线程上完成请求,而不是启动该请求
您可以在此处找到更多信息:。该Wiki页面来自不同的DI框架,但大部分适用于Ninject