私はまだ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 を変更する必要があります。
int コンストラクターを使用しないように Die クラスをリファクタリングすると、すべて正常に動作します。しかし、クラスの要件であるため、numSides パラメーターを初期化することを覚えておく必要があります。
これは DI の悪いメンタル モデルだと思います。誰でも私を啓発できますか?