控制反转(或IoC)在第一次遇到时会非常混乱.
我目前收到此错误:
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()
{
bool found = false;
string feedSource = "AUTO";
switch (feedSource) // companyFeedDetail.FeedSourceTable.ToUpper())
{
case "AUTO":
var clientList = from a in _dbFeed.Client.Include("Auto") select a;
foreach (RivWorks.Model.NegotiationAutos.Client client in clientList)
{ …
Run Code Online (Sandbox Code Playgroud) 根据Martin Fowler撰写的论文,控制反转是程序控制流程被颠倒的原则:代替程序员控制程序流程,外部源(框架,服务,其他组件)控制它.这就像我们把东西塞进别的东西.他提到了一个关于EJB 2.0的例子:
例如,会话Bean接口定义ejbRemove,ejbPassivate(存储到辅助存储)和ejbActivate(从被动状态恢复).你无法控制何时调用这些方法,只是它们的作用.容器打电话给我们,我们不打电话给它.
这导致框架和库之间的区别:
控制反转是使框架与库不同的关键部分.库本质上是一组可以调用的函数,这些日子通常组织成类.每个调用都会执行一些操作并将控制权返回给客户端.
我认为,DI是IOC的观点,意味着对象的依赖性被颠倒了:相反,它控制着自己的依赖关系,生命周期......还有其他东西为你做.但是,正如你用手告诉我的DI,DI不一定是IOC.我们仍然可以有DI而没有IOC.
然而,在本文中(来自pococapsule,另一个IOC C/C++框架),它表明,由于IOC和DI,IOC容器和DI框架远远优于J2EE,因为J2EE将框架代码混合到组件中因此不能成为普通的旧Java/C++对象(POJO/POCO).
除依赖注入模式之外的控制容器的反转(存档链接)
附加阅读以了解旧的基于组件的开发框架的问题是什么,这导致了上面的第二篇论文:为什么以及什么是控制反转(存档链接)
我的问题:IOC和DI究竟是什么?我很迷惑.基于pococapsule,IOC比仅仅反转对象或程序员和框架之间的控制更重要.
哪些C#/ .NET依赖注入框架值得研究?你能说出他们的复杂性和速度.
在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中广泛使用.
python architecture design-patterns dependency-injection inversion-of-control
我发现我的构造函数开始看起来像这样:
public MyClass(Container con, SomeClass1 obj1, SomeClass2, obj2.... )
Run Code Online (Sandbox Code Playgroud)
随着参数列表不断增加.由于"容器"是我的依赖注入容器,为什么我不能这样做:
public MyClass(Container con)
Run Code Online (Sandbox Code Playgroud)
每个班级?有什么缺点?如果我这样做,感觉我正在使用一个美化的静电.请分享您对IoC和依赖注入疯狂的看法.
c# java dependency-injection ioc-container inversion-of-control
我正在思考一个C#库的设计,它将有几个不同的高级函数.当然,这些高级功能将尽可能使用SOLID类设计原则来实现.因此,可能存在供消费者定期直接使用的类,以及作为那些更常见的"最终用户"类的依赖性的"支持类".
问题是,设计库的最佳方法是:
我目前的想法是为常见的DI库提供一些"DI注册模块"(例如,一个StructureMap注册表,一个Ninject模块),以及一个非DI的集合或工厂类,并包含与这几个工厂的耦合.
思考?
什么是解释依赖注入的好方法?
我在Google上找到了几个教程,但没有一个能让读者认为只是Java初学者的教程.你会如何向新手解释这个?
我目前正在使用nodejs创建一些实验项目.我已经用Spring编写了很多Java EE Web应用程序,并且很欣赏那里的依赖注入的简易性.
现在我很好奇:如何使用节点进行依赖注入?或者:我甚至需要它吗?是否有替换概念,因为编程风格不同?
我说的是简单的事情,比如分享数据库连接对象,到目前为止,但我还没有找到满足我的解决方案.