Dependency injection WebBackgrounder+;尼尼特
有人有在库中使用依赖项注入的经验吗 特别是,我需要从作业中访问我的存储库,它们的生存期取决于任务的生存期。我最好避免财产注入 这是我在App_Start中的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() {
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可以在不同的线程上完成请求,而不是启动该请求