假设我的类型在构造函数中带有一些参数,如下所示:
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");
你觉得在这种情况下我应该怎么做?