asp.net-mvc-3 – DI模式是否限制了昂贵的对象创建以及不经常的
当谈到典型的构造函数依赖注入时,我很难理解看似明显的模式问题/限制.例如,假设我有一个ASP.NET MVC3控制器,它看起来像:
Public Class MyController Inherits Controller Private ReadOnly mServiceA As IServiceA Private ReadOnly mServiceB As IServiceB Private ReadOnly mServiceC As IServiceC Public Sub New(serviceA As IServiceA,serviceB As IServiceB,serviceC As IServiceC) Me.mServiceA = serviceA Me.mServiceB = serviceB Me.mServiceC = serviceC End Sub Public Function ActionA() As ActionResult ' Do something with Me.mServiceA and Me.mServiceB End Function Public Function ActionB() As ActionResult ' Do something with Me.mServiceB and Me.mServiceC End Function End Class 我遇到困难的事情是,在任何给定时间,DI容器被要求实例化所有三个依赖项,这个控制器上的操作方法可能只需要一部分依赖项. 似乎假设对象构造是肮脏的,并且没有来自对象构造的副作用或者所有依赖性都被一致地利用.如果物体结构没有吱吱声或有副作用怎么办?例如,如果构建IServiceA涉及打开连接或分配其他重要资源,那么当调用ActionB时,这将完全浪费时间/资源. 如果这些操作方法使用服务位置模式(或其他类似模式),则永远不会有机会不必要地构造将不使用的对象实例,当然使用此模式会附加其他问题使其无法吸引人. 使用DI的规范构造函数注入接口模式是否基本上将开发人员锁定为一种“限制”,即依赖关系的实现必须是实例化的,或者实例必须被大量使用?我知道所有模式都有其优点和缺点,这只是DI的缺点之一吗?我以前从未见过它,我觉得好奇. 解决方法
如果你有很多字段没有被每个成员使用,这意味着类的凝聚力很低.这是一个通用的编程概念 – 构造函数注入使它更加明显.这通常是一个非常好的指标,表明
Single Responsibility Principle正在被侵犯.
如果是这种情况则重构(例如到Facade Services). You don’t have to worry about performance when creating object graphs. 说到副作用,(DI)constructors should be simple and not have side effects. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – Autofac,MVC(带ActionFilters),Web.Forms –
- asp.net – 使用HttpRequestMessage.Properties传递每个请求
- asp.net-mvc – jqGrid中的日期选择器,简单的例子?
- asp.net-mvc – 使用Razor,如何使所有“bool?”属性显示为
- 在ASP.NET中使用2个数据库作为会话信息
- asp.net-mvc-3 – @ Html.TextBoxFor文本框在验证失败后未突
- asp.net-mvc – 如何让Controller Action采用动态参数?
- 覆盖单个页面的ASP.NET表单身份验证
- asp.net – ASHX httpHandler检测到一个潜在危险的Request.
- .net – DNU发布 – 来自MSBuild的no-source
- ASP.NET自带对象JSON字符串与实体类的转换
- 使用Asp.NET标识进行LDAP身份验证
- 如何在ASP.NET页面上注册自定义服务器控件
- asp.net – 如何在.net WebApi2应用程序中使用OA
- asp.net-mvc – 如何使用Data Annotations Exten
- asp.net-mvc – Bower,Grunt和Yeoman如何适应Vis
- 有没有办法确保(仅)在HTTPS协议上运行ASP.NET应用
- asp.net-mvc – ASP.NET MVC – 单元测试过度杀毒
- asp.net-mvc-4 – 具有动态部分视图创建的MVC Aj
- asp.net-mvc – 使用Html.RouteLink添加一个css类