我有与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 }));

10-07 15:18