Questions tagged «inversion-of-control»

控制反转(IoC)是一种抽象原理,描述了一些软件体系结构设计的一个方面,其中与过程编程相比,系统的控制流是反向的。


20
Entity Framework中的SqlException-不允许新事务,因为会话中正在运行其他线程
我目前收到此错误: System.Data.SqlClient.SqlException:不允许新事务,因为会话中正在运行其他线程。 在运行此代码时: public class ProductManager : IProductManager { #region Declare Models private RivWorks.Model.Negotiation.RIV_Entities _dbRiv = RivWorks.Model.Stores.RivEntities(AppSettings.RivWorkEntities_connString); private RivWorks.Model.NegotiationAutos.RivFeedsEntities _dbFeed = RivWorks.Model.Stores.FeedEntities(AppSettings.FeedAutosEntities_connString); #endregion public IProduct GetProductById(Guid productId) { // Do a quick sync of the feeds... SyncFeeds(); ... // get a product... ... return product; } private void SyncFeeds() { …

30
为什么我需要一个IoC容器而不是简单的DI代码?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 6年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我使用依赖注入(DI)已有一段时间了,注入了构造函数,属性或方法。我从来没有觉得需要使用控制反转(IoC)容器。但是,我阅读的内容越多,社区使用IoC容器的压力就越大。 我玩过.NET容器,如StructureMap,NInject,Unity和Funq。我仍然看不到IoC容器如何使我的代码受益/改进。 我也害怕在工作中开始使用容器,因为许多同事会看到他们不理解的代码。他们中的许多人可能不愿意学习新技术。 请说服我,我需要使用IoC容器。与工作中的其他开发人员交谈时,我将使用这些参数。

21
控制反转与依赖注入
根据马丁·福勒(Martin Fowler)的论文,控制反转是程序控制流反向的原理:外部源(框架,服务,其他组件)代替程序控制程序流,而由程序控制流它。就像我们将某些东西插入其他东西一样。他提到了有关EJB 2.0的示例: 例如,会话Bean接口定义了ejbRemove,ejbPassivate(存储到辅助存储)和ejbActivate(从被动状态恢复)。您不必控制何时调用这些方法,而可以控制它们的作用。容器给我们打电话,我们不给它打电话。 这导致框架和库之间的差异: 控制反转是使框架与库不同的关键部分。库本质上是您可以调用的一组函数,这些天通常组织成类。每个调用都会执行一些工作,并将控制权返回给客户端。 我认为,DI是IOC的观点意味着对象的依赖关系被颠倒了:与其控制自己的依赖关系,不如生命周期……还有其他事情为您服务。但是,正如您手动告诉我的那样,DI不一定是IOC。我们仍然可以拥有DI而没有IOC。 但是,在本文中(来自pococapsule,这是另一个C / C ++的IOC框架),它表明,由于IOC和DI,IOC容器和DI框架要优于J2EE,因为J2EE将框架代码混合到了组件中,因此不会使其成为普通的Java / C ++对象(PO​​JO / POCO)。 除依赖注入模式以外的控制容器的反转(归档链接) 进一步阅读以了解旧的基于组件的开发框架有什么问题,这导致了上面的第二篇论文:控制反转的原因和内容(归档链接) 我的问题:什么是IOC和DI?我很困惑。基于pococapsule,IOC不仅仅是对象或程序员与框架之间的控制反转。

12
哪些.NET依赖注入框架值得研究?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 哪些C#/。NET依赖注入框架值得研究?您能说出它们的复杂性和速度。

15
为什么IoC / DI在Python中不常见?
在Java中,IoC / DI是一种非常普遍的做法,广泛用于Web应用程序,几乎所有可用的框架和Java EE中。另一方面,也有很多大型的Python Web应用程序,但是除了Zope(我听说过应该非常可怕的编码)之外,IoC在Python世界中似乎并不普遍。(如果您认为我错了,请举一些例子)。 当然,有一些流行的Java IoC框架的克隆可用于Python,例如springpython。但是它们似乎都没有被实际使用。至少,我从来没有在一个stumpled Django的或SQLAlchemy的 + <insert your favorite wsgi toolkit here>,它使用类似的东西,基于Web应用程序。 我认为IoC具有合理的优势,例如可以轻松替换django-default-user-model,但是在Python中广泛使用接口类和IoC看起来有些奇怪,而不是“ pythonic”。但是也许有人有一个更好的解释,为什么IoC在Python中没有得到广泛使用。

9
如何避免依赖注入构造函数的疯狂?
我发现我的构造函数开始看起来像这样: public MyClass(Container con, SomeClass1 obj1, SomeClass2, obj2.... ) 不断增加的参数列表。由于“容器”是我的依赖项注入容器,所以为什么我不能这样做: public MyClass(Container con) 每堂课?不利之处是什么?如果执行此操作,则感觉就像我在使用精美的静态方法。请分享您对IoC和依赖注入疯狂的想法。

4
依赖注入(DI)“友好”库
我正在考虑C#库的设计,该库将具有几个不同的高级功能。当然,这些高级功能将尽可能使用SOLID类设计原则来实现。这样,可能会有旨在供消费者定期直接使用的类,以及作为那些更常见的“最终用户”类的依赖的“支持类”。 问题是,设计库的最佳方法是什么: DI不可知-尽管为一个或两个常见的DI库(StructureMap,Ninject等)添加基本的“支持”似乎是合理的,但我希望消费者能够将库与任何DI框架一起使用。 非DI可用-如果库的使用者不使用DI,则该库仍应尽可能易于使用,从而减少用户创建所有这些“不重要”依赖项而要做的工作量。他们想要使用的“真实”类。 我当前的想法是为常见的DI库提供一些“ DI注册模块”(例如,StructureMap注册表,Ninject模块)以及非DI的set或Factory类,并包含与这几个工厂的耦合。 有什么想法吗?

21
我需要在NodeJS中进行依赖注入,还是要处理……?
我目前正在使用nodejs创建一些实验项目。我已经用Spring编写了很多Java EE Web应用程序,并赞赏那里的依赖注入的简易性。 现在我很好奇:如何使用节点进行依赖注入?或者:我什至需要它吗?是否存在替代概念,因为编程风格不同? 到目前为止,我在谈论简单的事情,例如共享数据库连接对象,但是我还没有找到一个令我满意的解决方案。

5
如何解释对5岁孩子的依赖注射?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 有什么好的方法解释依赖项注入? 我在Google上找到了几本教程,但是都没有一个假定读者只是Java初学者。您将如何向新手解释?

5
什么是温莎城堡,为什么我要关心?
我是Windows的长期开发人员,对win32和早期COM有所了解。自2001年以来,我一直在使用.NET,所以我精通C#和CLR。在开始参与Stack Overflow之前,我从未听说过温莎城堡。我已经阅读了温莎城堡的“入门”指南,但没有点击。 教这只老狗新的花样,并告诉我为什么我应该将Castle Windsor集成到我的企业应用程序中。


14
通过构造函数或属性设置器进行依赖注入?
我正在重构一个类,并为其添加新的依赖关系。该类当前正在构造函数中使用其现有的依赖项。因此,为了保持一致性,我将参数添加到构造函数中。 当然,有一些子类,甚至还有更多用于单元测试的子类,所以现在我正在玩改变所有构造函数以匹配的游戏,并且这需要很长时间。 它使我认为,将属性与setter一起使用是获取依赖项的更好方法。我不认为注入的依赖关系应该是构造类实例的接口的一部分。您添加了一个依赖项,现在所有用户(子类以及直接实例化您的任何人)突然都知道了。感觉就像封装的破坏。 这似乎不是此处现有代码的模式,因此我希望了解什么是一般共识,即构造函数与属性的优缺点。使用属性设置器更好吗?

5
是否存在用于初始化通过DI容器创建的对象的模式
我试图让Unity来管理对象的创建,并且我想拥有一些直到运行时才知道的初始化参数: 目前,我唯一想到的方法是在接口上使用Init方法。 interface IMyIntf { void Initialize(string runTimeParam); string RunTimeParam { get; } } 然后要使用它(在Unity中),我会这样做: var IMyIntf = unityContainer.Resolve<IMyIntf>(); IMyIntf.Initialize("somevalue"); 在这种情况下,runTimeParam将在运行时根据用户输入确定参数。此处的普通情况只是返回的值,runTimeParam但实际上,参数将类似于文件名,而initialize方法将对文件进行处理。 这会产生许多问题,即该Initialize方法在界面上可用并且可以多次调用。在实现中设置标志并在重复调用时引发异常Initialize似乎很麻烦。 在我解析界面的那一刻,我不想了解任何有关的实现IMyIntf。不过,我真正想要的是该接口需要某些一次性初始化参数的知识。有没有一种方法可以用此信息注释(属性?)接口,并在创建对象时将其传递给框架? 编辑:描述了更多界面。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.