问题描述
我有许多组件都使用 .LifestylePerWebRequest()
,现在我已经决定实施 Quartz.NET 注册的Web应用程序,一个.NET作业调度库,它在执行独立的线程,而不是请求线程。
I have a web application where many components are registered using .LifestylePerWebRequest()
, now I've decided to implement Quartz.NET, a .NET job scheduling library, which executes in separate threads, and not the Request thread.
因此, HttpContext.Current
收益率空
。我的服务,仓库和的IDbConnection
被实例化至今使用 .LifestylePerWebRequest()
,因为它使人们更容易处置他们当请求结束。
As such, HttpContext.Current
yields null
. My services, repositories, and IDbConnection
were instanced so far using .LifestylePerWebRequest()
because it made it easier to dispose of them when the requests ended.
现在我想在这两种情况下使用这些组件,在Web请求我希望他们能不受影响,而在非请求的背景下,我希望他们使用不同的生活方式,我想我可以处理处置自己,但如何我应该去为它选择基于当前上下文的组件的生活方式吗?
Now I want to use these components in both scenarios, during web requests I want them to remain unaffected, and in non-request contexts I want them to use a different Lifestyle, I figure I can handle the disposing myself, but how should I go about it for choosing a lifestyle for the components based on the current context?
目前我注册服务(例如),像这样的:
Currently I register services (for example), like this:
container.Register(
AllTypes
.FromAssemblyContaining<EmailService>()
.Where(t => t.Name.EndsWith("Service"))
.WithService.Select(IoC.SelectByInterfaceConvention)
.LifestylePerWebRequest()
);
我想我应该用某种扩展方法,但我就是不明白它..
I figure I should be using some kind of extension method but I just don't see it..
推荐答案
您应该使用 castleprojectcontrib.
这是混合型的生活方式是一个真正融合了由两个下层的生活方式:主要的生活方式和二次生活方式。混合生活方式首先尝试使用的主要生活方式;如果它是由于某种原因不可用,则使用二次生活方式。这通常与PerWebRequest用作主要生活方式:如果HTTP上下文是可用的,它被用来作为作用域组件实例;否则,使用二次生活方式。
这篇关于Castle.Windsor生活方式根据上下文?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!