asp.net-mvc – Unity.MVC4懒惰在ASP.NET MVC应用程序中不起作用
|
我正在使用ASP.NET MVC 4应用程序. Home controller的构造函数使用2参数进行参数化(Iservice1 service1,Iservice2 service2) 我不想使用container.Resolve<< Lazy< IService1>>(); 从这个链接(http://msdn.microsoft.com/en-us/library/dn178463(v=pandp.30).aspx)我明白unity.mvc 4使用unity 3,它具有Lazy加载支持,但是如何在ASP.NET MVC 4中执行此操作. 解决方法通常,实例构造函数除了执行正确的空检查并存储传入的引用之外,应该做什么.这使得对象图的构造变得快速和 reliable.任何初始化都应该推迟到稍后的时刻,即组件第一次使用的时间.这将是最多的情况 – 防止延迟创建组件以提高性能,如果这仍然是一个问题,您可能需要考虑具有better performance的容器. 对于那些需要延迟创建的空闲时刻,请不要使用Lazy< T>.为了这.注入Lazy< T>是一个leaky abstraction,就像IDisposable放在接口上一样.注入懒惰< T>泄漏,因为从理论上讲,每一个依赖都可能很慢或者可能需要推迟.为了防止在引入较慢的服务实现时在整个应用程序中进行彻底的更改,我们最好使应用程序中的每个依赖项成为Lazy< IDependency>在前面,因为这可以使我们不必在以后进行更改. 但那当然是愚蠢和丑陋的.但是,即使应用程序足够小,以至于可以负担得起这种彻底的变化,为什么消费者应该知道或关心该服务需要延迟初始化的事实?这不是一个实现细节吗?为什么我们将这种懒惰的行为加入到这项服务的合同中?这样做会使我们的代码和我们需要编写的测试更加复杂.这是不需要的accidental complexity. 因此,您应该只注入一个IService1并实现并注册一个实现惰性行为的代理,而不是注入一个Lazy< IService1>.这实际上很容易做到如下: public class LazyService1Proxy : IService1
{
private Lazy<IService1> service;
public LazyService1Proxy(Lazy<IService1> service) {
this.service = service;
}
void IService1.Method1() {
this.service.Value.Method1();
}
object IService1.Method2(string foo) {
return this.service.Value.Method2(foo);
}
}
该代理可以注册如下: container.Register<IService1>(new InjectionFactory(c =>
new LazyService1Proxy(
new Lazy<IService1>(
() => c.Resolve<RealService1Impl>())))); (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 自定义ASP.Net DataPager生成的HTML
- asp.net – iFrame中的Response.Redirect(),重定向父窗口
- asp.net – 应用程序域和应用程序池之间的区别?
- asp.net-mvc – ASP.NET mvc 4控制器参数始终为空时发送jso
- ASP .NET MVC 3 – 如何提交嵌套在html表单中的ajax表单
- asp.net – 如何使用DataPager与服务器端寻呼?
- asp.net – 向GridView Row添加ID
- asp.net下Repeater使用 AspNetPager分页控件
- iis-7 – ASP经典IIS7问题
- asp.net – 实体框架:如何解决“FOREIGN KEY约束可能导致循
