IoC vs库中的全局变量

所以说我的类型在构造函数中有一些参数,如下所示:

public MyType(IComObject wrapper,string table) {} 

现在IComObject是两个不同COM对象的包装器。 我的所有类型(90%)都必须使用IComObject,因此以良好的DI方式(允许测试)我将IComObject传递给需要它的每种类型。

主要的问题是当有人去使用我的COM包装器库时,必须将IComObject的一个实例传递给他们所做的一切,这使得代码有点难以管理和维护。

我想知道是否应该使用IoC容器或用户可以设置的全局变量,以便它们不必传递IComOject实例。 例:

 public MyType(string table) : this(IoC.Resolve,table) {} 

要么

 public MyType(string table) : this(StaticClass.ComInstance,table) {} 

这样用户就可以这样做:

 //Set up Ioc container COMObject object = new COMObject(); Ioc.Register(typeof(IComObject),object); MyType mytype = new MyType("test.tab"); 

要么

 COMObject object = new COMObject(); StaticClass.ComInstance = object; MyType mytype = new MyType("test.tab"); 

在这种情况下你认为我该怎么做?

IoC绝对是最佳选择。 Globals并不是编程中最糟糕的恶魔,少数全局变量并不是最糟糕的事情,但IoC是一个很好的,干净的模式,从长远来看,它易于理解且易于维护。 IoC的依赖关系也更加明确。

使用容器,这是其中的重点。 我只使用了StructureMap,但我绝对可以推荐它。 大量的文档,它很容易起床和运行。 一旦你习惯了它,你就会喜欢它制作的容易程度。 取消胜利!

实际上,你的容器将是一个查询对象的静态类,所以有点不是真正的选择:)