我仍然是 DI 的新手,我试图了解我是否以错误的方式思考问题。当我想表示一个依赖于 IRandomProvider 的 Die 对象时,我正在处理一个玩具问题。这个界面很简单:
public interface IRandomProvider
{
int GetRandom(int lower, int upper);
}
我想要一个看起来像这样的 Die 构造函数:
Die(int numSides, IRandomProvider provider)
我正在尝试使用具有如下方法的静态 DIFactory:
public static T Resolve<T>()
{
if (kernel == null)
{
CreateKernel();
}
return kernel.Get<T>();
}
CreateKernel 只是绑定到 IRandomProvider 的特定实现。
我希望能够通过以下方式调用它:
DIFactory.Resolve<Die>(20);
如果不制作一个可以让我处理 ConstructorArgs 的特殊版本的“Resolve”,我就无法完成这项工作。这似乎使事情变得过于复杂,并且需要我为每个其他实例修改 DIFactory,并与构造函数参数的特定名称相关联。
如果我重构 Die 类以不使用 int 构造函数,则一切正常。但是现在有人必须记住初始化 numSides 参数,这似乎是个坏主意,因为这是类的要求。
我怀疑这对 DI 来说是一个糟糕的心理模型。任何人都可以启发我吗?