团结懒惰的决心

时间:2012-04-05 09:29:15

标签: .net dependency-injection unity-container ioc-container lazy-evaluation

我有MVC webApi个应用程序与Unity一起使用。我必须将接口ITest解析为单例类(DelegateHandler)。但是界面ITest每个httprequest终身经理都很重要。所以我无法在Application_Start事件上解决ITest,因为现在没有HttpRequest,但DelegateHandler仅在httprequest生命周期中使用ITest。

那么可以将延迟解析发送给DelegateHandler,或者有人可能有其他有趣的解决方案吗?

2 个答案:

答案 0 :(得分:2)

服务的生命周期应始终等于或短于其依赖关系的生命周期,因此您通常会将ITest注册为Per Http Request或Transient,但如果不可能,请包含依赖项({{1我假设在代理中具有每个Http请求生存期:

DelegateHandler

答案 1 :(得分:0)

另一个选择是执行以下操作:

public class Foo
{
    Func<IEnumerable<ITest>> _resolutionFunc;
    ITest _test;
    public Foo(Func<IEnumerable<ITest>> resolutionFunc)
    {
        _resolutionFunc=resolutionFunc;
    }

private void ResolveFuncToInstance()
{
    _test=_resolutionFunc().First();
}
}

我们正在做的是让Unity向我们提供一个代理,它将解析容器中的所有ITest实例。由于这是一个Func,我们可以在每次想要从Unity进行实际分辨时调用它。

这与史蒂文正在做的事情大致相同,但使用内置的Unity功能来完成我们正在寻找的事情。