我有一个使用ASP.NET MVC,Unity和Linq到SQL的应用程序。 统一容器注册从System.Data.Linq.DataContextinheritance的typesAcmeDataContext ,并使用HttpContext与LifetimeManager 。 有一个控制器工厂使用统一容器获取控制器实例。 我在构造函数中设置了所有依赖关系,如下所示: // Initialize a new instance of the EmployeeController class public EmployeeController(IEmployeeService service) // Initializes a new instance of the EmployeeService class public EmployeeService(IEmployeeRepository repository) : IEmployeeService // Initialize a new instance of the EmployeeRepository class public EmployeeRepository(AcmeDataContext dataContext) : IEmployeeRepository 无论何时需要构造函数,统一容器都会parsing一个连接,该连接用于parsing数据上下文,然后是存储库,然后是服务,最后是控制器。 问题是IEmployeeRepository暴露了SubmitChanges方法,因为服务类没有DataContext引用。 我被告知应该从仓库外部pipe理工作单元,所以看起来我应该从仓库中删除SubmitChanges 。 这是为什么? 如果这是真的,这是否意味着我必须声明一个IUnitOfWork接口并使每个服务类都依赖于它? 我还可以如何让我的服务class来pipe理工作单位?
我做了一个三层应用程序,参考这个答案中描述的refrences: DAL with Repositories -> BLL with services and IRepository <- Asp.net mvc-app 为了使dependency injection运行,我看到几个选项: 1.从Web应用程序添加对DAL的引用,以便能够在应用程序启动时设置绑定。 2.使用xml-configuration的容器 (3.使用reflection来加载dal-assembly并查找types) 选项1很容易,也使DAL.dll被复制到垃圾箱,但后来我突然重新介绍了我努力摆脱的参考。 现在可以直接访问存储库。 选项2和3似乎不必要的复杂。 有没有别的办法?
根据马丁·福勒(Martin Fowler)的论文 ,控制反转是程序控制stream程颠倒的原理:外部源(框架,服务,其他组件)不是控制程序stream程的程序员,而是控制它。 就像我们把东西插入其他东西一样。 他提到了一个关于EJB 2.0的例子: 例如Session Bean接口定义了ejbRemove,ejbPassivate(存储到辅助存储)和ejbActivate(从被动状态恢复)。 当这些方法被调用时,你无法控制,只是他们做了什么。 容器打电话给我们,我们不叫它。 这导致了框架和库之间的区别: 控制反转是使框架与图书馆不同的一个关键部分。 图书馆本质上是一组你可以调用的函数,这些函数通常组织成类。 每个调用都会做一些工作,并将控制权返回给客户端。 我认为,DI是IOC的观点意味着一个对象的依赖是相反的:相反,它控制着它自己的依赖关系,生命周期……其他的东西是为你做的。 但是,当你用手告诉我DI时,DI不一定是IOC。 我们仍然可以有DI,也没有IOC。 然而,在本文中(来自pocoapsule,另一个IOC Framework for C / C ++),它表明由于IOC和DI,IOC容器和DI框架远远优于J2EE,因为J2EE将框架代码混合到组件,因此不会使它成为普通的Java / C ++对象(POJO / POCO)。 除dependency injection模式之外的控制容器的反转 : http : //www.pocomatic.com/docs/whitepapers/ioc-vs-di/ 补充阅读,了解旧的基于组件的开发框架的问题,这导致了上面的第二篇文章: 为什么和控制反转 : http : //www.pocomatic.com/docs/whitepapers/ioc/ 我的问题 :IOC和DI究竟是什么? 我很困惑。 基于pococapsule,国际奥委会是一个更重要的东西比只是颠倒对象的控制或程序员和框架。
什么是解释dependency injection的好方法? 我在Google上find了几个教程,但是没有一个会假设读者只是一个Java初学者。 你如何解释这个新手?
我正在修改我的软件Messenger.Default(…)位混乱。 有没有任何备忘单知道MVVMLight SimpleIoc使用(而不是一般的IoC描述)?
我感觉到没有控制倒置这样的东西,或者说正确的术语是dependency injection。 我错了吗? 我一直试图为我自己定义IoC。 在这样做的过程中,我学到了很多关于IoC容器和dependency injection的知识。 刚才我从Martin Fowler的网站上看到这个消息: 因此,我认为我们需要一个更具体的名称为这种模式。 控制反转是一个过于笼统的术语,因此人们感到困惑。 因此,与各种IoC倡导者进行了大量的讨论,我们决定使用Dependency Injection这个名字。 现代IoC的世界是不是dependency injection只是实现IoC的一种方式?
我正在重构一个类,并添加一个新的依赖关系。 该类正在构造函数中使用现有的依赖关系。 所以为了一致性,我将这个参数添加到构造函数中。 当然,还有几个子类加上unit testing,所以现在我正在玩游戏,改变所有的构造函数来匹配,并且需要很长时间。 这让我觉得使用setter属性是获取依赖关系的更好方法。 我不认为注入的依赖关系应该是构造一个类的实例的接口的一部分。 你添加一个依赖关系,现在所有的用户(子类和任何直接实例化你的用户)突然知道它。 这感觉就像封装的rest。 这似乎不是现有代码的模式,所以我正在寻找一般共识是什么,build设者与财产的利弊。 是更好地使用属性设置?
我有两个相关的(对这个问题)项目和其他一些解决scheme; 具有几个其他项目使用的function的类库。 ASP.NET MVC应用程序。 我的问题基本上是我应该和Ninject 2做IoC,考虑… 类库需要一些DI爱,尤其是需要Web请求特定会话对象的仓库类(请参阅工作单元)。 MVC应用程序需要DI,因为Ninject 2基本上是从NinjectHttpApplicationinheritance而来的。 对类库的unit testing需要注意到这一点,以注入一组不同的存储库。 Web应用程序的unit testing需要注入的原因相同。 我在这里画了一个心理angular落,因为我只看到了三个选项。 类库中的DI,Web应用程序中的DI,或两者,但每个都有问题: 我只能在类库中做DI,因为MVC应用程序需要从NinjectHttpApplicationinheritance。 我不能只在MVC应用程序中做DI – 毕竟,其他库使用类库,MVC应用程序不应该太了解库的内部。 我想这是唯一的出路,我可以看到:两个项目的独立IoC。 类库和MVC应用程序每个都有自己的IoC设置,并为他们的东西做DI,而不是真的关心对方。 有没有人有一些“最佳做法”或指导如何做这样的事情? 我无法想象我是第一个在这种情况下结束的人,知道这个“正确的”方法是什么样子,这一定很高兴。 谢谢!
我的应用程序中将包含以下组件 数据访问 DataAccess.Test 商业 Business.Test 应用 我希望使用温莎城堡作为IoC粘合层,但我有点不确定的胶合devise。 我的问题是谁应该负责注册的对象进入温莎? 我有几个想法; 每一层都可以注册自己的对象。 为了testingBL,testing台可以为DAL注册模拟类。 每层可以注册其依赖关系的对象,例如,业务层注册数据访问层的组件。 为了testingBL,testing台将不得不卸载“真实”的DAL对象并注册模拟对象。 应用程序(或testing应用程序)注册依赖关系的所有对象。 有人能帮助我一些想法和优点/缺点与不同的path? 以这种方式使用温莎城堡的示例项目的链接将是非常有帮助的。
我正在探索dependency injection,术语组合根被用在所有地方。 那是什么?