【发布时间】:2012-09-22 12:30:43
【问题描述】:
我还是 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 来说是一个糟糕的心理模型。谁能赐教?
【问题讨论】:
-
顺便说一句:你的意思是
Dice而不是Die? =) -
不,Die 是单数。骰子是复数。我将实现一个 Dice 类,该类包含许多骰子,可以检查双打等。
-
我有时将参数从构造函数移动到成员函数:int Roll(int numSides)
标签: c# dependency-injection ninject