Tag: 反转控制

MEF(pipe理可扩展性框架)与IoC / DI

MEF(托pipe扩展框架)解决了现有的IoC / DI容器无法解决的问题?

MEF与任何IoC

纵观微软的托pipe扩展性框架(MEF)和各种IoC容器(如Unity),我无法看出何时使用一种types的解决scheme。 更具体地说,似乎MEF处理大多数IoCtypes模式,并且像Unity这样的IoC容器不是必需的。 理想情况下,我希望看到一个很好的使用情况,即使用IoC容器代替MEF,或者除了MEF之外。

应用程序体系结构/在F#

在C#中,我一直在做SOLID到最近的一个非常极端的水平,并在某种程度上意识到,我现在基本上没有比现在编写函数更多的东西了。 在我最近又开始研究F#之后,我认为这可能是现在我所做的大部分更合适的语言select,所以我想尝试将一个真实世界的C#项目移植到F#作为概念的certificate。 我想我可以把实际的代码(非常不习惯的方式)拉下来,但我无法想象一个架构是什么样子的,这使得我可以像在C#中一样灵活的工作。 我的意思是,我有很多使用IoC容器编写的小类和接口,而且我也使用Decorator和Composite等模式。 这导致(在我看来)非常灵活和可演化的整体架构,允许我轻松地replace或扩展应用程序的任何点的function。 根据所需更改的大小,我可能只需要编写一个新的接口实现,将其replace为IoC注册并完成。 即使变化较大,我可以replace对象图的一部分,而应用程序的其余部分就像以前一样。 现在用F#,我没有类和接口(我知道我可以,但我认为这是在我想要做实际的函数式编程),我没有构造函数注入,我没有IoC容器。 我知道我可以使用更高阶的函数来做类似Decorator模式的事情,但是这看起来不像给构造函数注入类那样具有同样的灵活性和可维护性。 考虑这些C#types: public class Dings { public string Lol { get; set; } public string Rofl { get; set; } } public interface IGetStuff { IEnumerable<Dings> For(Guid id); } public class AsdFilteringGetStuff : IGetStuff { private readonly IGetStuff _innerGetStuff; public AsdFilteringGetStuff(IGetStuff innerGetStuff) { this._innerGetStuff = innerGetStuff; } […]

必须dependency injection是以牺牲封装性为代价的吗?

如果我理解正确,dependency injection的典型机制是通过类的构造函数或通过类的公共属性(成员)注入。 这暴露了被注入的依赖关系,违反了封装的OOP原则。 我是否正确地认定这个权衡? 你如何处理这个问题? 请看下面我自己的问题的答案。

有人可以解释微软统一?

我一直在阅读有关Unity(dependency injection,控制反转)的MSDN上的文章,但我想我需要用简单的术语(或简单的例子)来解释它。 我熟悉MVPC模式(我们在这里使用它),但是我还不能真正掌握这个Unity的东西,而且我认为这是我们应用程序devise的下一步。

什么是温莎城堡,为什么要关心?

我是一个很长时间的Windows开发者,在win32和早期的COM上已经断绝了我的牙齿。 自2001年以来,我一直在使用.Net,所以我非常stream利地使用C#和CLR。 我从来没有听说过温莎城堡,直到我开始参与堆栈溢出。 我已阅读温莎城堡“入门指南”,但不是点击。 教这个老狗新花样,告诉我为什么我应该把温莎城堡整合到我的企业应用程序中。

为什么IoC / DI在Python中不常见?

在Java中, IoC / DI是一种非常普遍的做法,广泛用于Web应用程序,几乎所有可用的框架和Java EE。 另一方面,也有很多大的Python Web应用程序,但除了Zope(我听说应该是非常糟糕的代码)之外,IoC在Python世界中似乎并不常见。 (如果你认为我错了,请列举一些例子)。 当然有几个stream行的Java IoC框架的克隆可用于Python,例如springpython 。 但是他们似乎都没有被实际使用。 至less,我从来没有在Django或sqlalchemy + <insert your favorite wsgi toolkit here>基于Web的应用程序,它使用类似的东西。 在我看来,IoC具有合理的优势,例如可以很容易地replacedjango-default-user-model,但Python中接口类和IoC的广泛使用看起来有点奇怪,而不是pythonic。 但也许有人有一个更好的解释,为什么IoC没有广泛使用Python。

在NodeJS中是否需要dependency injection,或者如何处理…?

我目前正在用nodejs创build一些实验项目。 我已经用Spring编写了很多的Java EE Web应用程序,并且欣赏了dependency injection的简易性。 现在我很好奇:我如何做与节点dependency injection? 或者:我甚至需要它吗? 有没有一个替代的概念,因为编程风格是不同的? 我在谈论简单的事情,比如共享一个数据库连接对象,到目前为止,但我还没有find一个满足我的解决scheme。

使用Unity如何将一个命名的dependency injection到构造函数中?

我有IRespository注册两次(与名字)在下面的代码: // Setup the Client Repository IOC.Container.RegisterType<ClientEntities>(new InjectionConstructor()); IOC.Container.RegisterType<IRepository, GenericRepository> ("Client", new InjectionConstructor(typeof(ClientEntities))); // Setup the Customer Repository IOC.Container.RegisterType<CustomerEntities>(new InjectionConstructor()); IOC.Container.RegisterType<IRepository, GenericRepository> ("Customer", new InjectionConstructor(typeof(CustomerEntities))); IOC.Container.RegisterType<IClientModel, ClientModel>(); IOC.Container.RegisterType<ICustomerModel, CustomerModel>(); 但是,当我想解决这个问题(使用IRepository),我必须做这样的手动解决: public ClientModel(IUnityContainer container) { this.dataAccess = container.Resolve<IRepository>(Client); ….. } 我想要做的就是让它在构造函数中parsing(就像IUnityContainer)。 我需要一些方法来说明哪个命名types要parsing。 像这样的东西:( 注意:不是真正的代码) public ClientModel([NamedDependancy("Client")] IRepository dataAccess) { this.dataAccess = dataAccess; ….. } 有没有办法让我的假代码工作?

企业图书馆Unity与其他IoC容器

使用Enterprise Library Unity与其他IoC容器(Windsor,Spring.Net,Autofac ..)有什么优点和缺点?