0

私はこのコードを持っています。

foreach(device into xmlfile)
{
       var kdevice = kernel.Get(type, parameters.ToArray()) as IDevice;
       devices.Add(kdevice);
       kernel.Bind(type).ToConstant(kdevice).InSingletonScope().Named(kdevice.Name);
       if (type.IsSubclassOf(typeof(BaseDevice)))
         kernel.Bind<BaseDevice>().ToConstant(kdevice as BaseDevice).InSingletonScope().Named(kdevice.Name);
}

私の問題は、名前付きバインディングを要求していなくても、次の反復で Kernel.Get が最初のバインディングで解決されるため、新しいオブジェクトを作成する必要があることです。

他のデバイスには、バインドされた名前付きデバイスで解決する必要がある "refDevice" 文字列パラメーターがある可能性があるため、レイト ファイナル バインディングを使用できません。

私は何をすべきか?

4

2 に答える 2

0

このような再バインディングは避けるべきです。

依存性注入コンテナーは、登録 (バインディングの宣言) を解決 (オブジェクトの取得) から分離する必要があります。

インターフェイスを実装する複数のオブジェクトが必要な場合は、そのリストを返すメソッドを使用してクラスを実装し、そのクラスをそれらのオブジェクトが必要とするクラスの依存関係にすることが方法です。

于 2013-05-01T21:40:51.157 に答える