0

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

public MyType(IComObject wrapper,string table) {}

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

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

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

public MyType(string table)
       : this(IoC.Resolve<IComObject>,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");

你觉得在这种情况下我应该怎么做?

4

2 回答 2

1

国际奥委会绝对是要走的路。全局变量并不是编程中最糟糕的事情,少量的全局变量也不是最糟糕的事情,但是 IoC 是一种很好的、​​干净的模式,从长远来看,它易于理解且更易于维护。IoC 的依赖关系也更加明确。

于 2009-06-03T22:29:05.003 回答
0

使用容器,这就是它们的重点。我只使用过 StructureMap,但我绝对可以推荐它。大量文档,而且它真的很容易启动和运行。一旦您对使用它感到满意,您就会喜欢它使事情变得多么容易。为胜利脱钩!

实际上,您的容器将是您查询对象的静态类,因此实际上没有选择:)

于 2009-06-03T21:35:43.660 回答