0

有没有人有使用WebBackgrounder库的依赖注入的经验?

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

这是我在 App_Start 中的 WebBackgrounderSetup:

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;
    }
}

感谢您的任何意见!

4

1 回答 1

2

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

  • 不要将服务(依赖项)传递给其他线程,因为服务(或可能)依赖于一个线程。
  • 相反,在该线程的开头解析一个新的对象图。
  • 对于具有特定于 HttpContext 的生命周期或缓存的依赖项(例如每个请求的生活方式),并且需要在后台线程上可用,您需要将其配置为 hibrid 生活方式(每个请求和每个线程) .
  • 不要在每个线程上注册这些依赖项,因为允许 ASP.NET 在与启动该请求不同的线程上完成请求。

您可以在此处找到更多信息:在多线程应用程序中使用依赖注入。该 Wiki 页面来自不同的 DI 框架,但其中大部分适用于 Ninject。

于 2012-08-10T08:56:30.677 回答