我有与MVC
一起使用的webApi
Unity
应用程序。我必须将接口ITest
解析为单例类(DelegateHandler
)。但是接口ITest具有每个httprequest
生命周期管理器,这一点很重要。所以我无法在Application_Start
事件上解析ITest,因为现在没有HttpRequest,但是DelegateHandler仅在httprequest生命周期中使用ITest。
那么是否可以将延迟解析发送给DelegateHandler或其他人有其他有趣的解决方案?
最佳答案
服务的生存期应始终等于或短于其依赖项的生存期,因此通常应将ITest
注册为“按Http请求或瞬态”,但是,如果不可能,请包装具有以下内容的依赖项(我认为是DelegateHandler
)代理中每个Http请求的生存期:
// Proxy
public class DelegateHandlerProxy : IDelegateHandler
{
public Container Container { get; set; }
// IDelegateHandler implementation
void IDelegateHandler.Handle()
{
// Forward to the real thing by resolving it on each call.
this.Container.Resolve<RealDelegateHandler>().Handle();
}
}
// Registration
container.Register<IDelegateHandler>(new InjectionFactory(
c => new DelegateHandlerProxy { Container = c }));