我有MVC
webApi
个应用程序与Unity
一起使用。我必须将接口ITest
解析为单例类(DelegateHandler
)。但是界面ITest每个httprequest
终身经理都很重要。所以我无法在Application_Start
事件上解决ITest,因为现在没有HttpRequest,但DelegateHandler仅在httprequest生命周期中使用ITest。
那么可以将延迟解析发送给DelegateHandler,或者有人可能有其他有趣的解决方案吗?
答案 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功能来完成我们正在寻找的事情。