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-mvc-4 – URL以’/’结尾时的服务器错误
- asp.net – 将数据绑定到网格视图
- asp.net – 我使用什么Active Directory字段来唯一标识用户
- asp.net-mvc – OnActionExecuting(FilterExecutingContext
- asp.net-mvc-3 – 使用Razor在Telerik MVC3网格中选择过滤器
- asp.net-mvc – ErrorAttribute vs OnException与Applicati
- 什么时候asp.net角色提供者生存和死亡?
- asp.net – 会话超时在IIS 7中如何工作?
- asp.net-mvc – Autofac,MVC(带ActionFilters),Web.Forms –
- asp.net-mvc-4 – 如何在AngularJS局部视图中使用ASP.Net M
- asp.net-mvc – 使用WCF促进AJAX调用是否有优势?
- asp.net-mvc – ASP.NET MVC和Visual Studio 201
- asp.net-mvc-3 – ASP.NET控制器名称与文件夹名称
- asp.net-mvc – 在每个网址的末尾添加尾部斜杠?
- asp.net-mvc – 有没有人能够或者至少试图将液体
- ASP.NET MVC4中@model使用多个类型实例的方法
- ASP.NET发布Web API接口时请求方式版本差异问题
- asp.net-web-api – 从ASP.NET Web API ASP.NET
- azure – 创建App Service订阅EMPTY
- wcf – 如何使用Fiddler收听asp.net开发服务器(即