は、私は以下の持っている想像して実装していますがSimpleInjector経由シングルトンの登録と同じインスタンスを返し、異なるインターフェイスのためには、
public interface IocInterface1 { }
public interface IocInterface2 { }
public class IocImpl : IocInterface1, IocInterface2 { }
私が好きだろうと私は介して、上記のクラス/インタフェースのいずれかのインスタンスを取得しようとした場合IoC、タイプごとに1つのシングルトンではなく、まったく同じインスタンスを取得します。たとえば、b1
とb2
は以下の真でなければなりません:
_container.RegisterSingle<IocInterface1, IocImpl>();
_container.RegisterSingle<IocInterface2, IocImpl>();
_container.RegisterSingle<IocImpl, IocImpl>();
var test1 = _container.GetInstance<IocInterface1>();
var test2 = _container.GetInstance<IocInterface2>();
var test3 = _container.GetInstance<IocImpl>();
bool b1 = test1 == test2;
bool b2 = test2 == test3;
が、これは可能ですか?
これは私が必要とするものに適しています - しかし、それは 'container.RegisterSingleOpenGeneric()'にも対応していますか?なぜなら、私は '[IocComponent]'を作成したカスタム属性で飾るすべての型をスキャンするアセンブリスキャナーがあり、これもオープンジェネリックに対応しているからです。 –
'RegisterSingleOpenGeneric'は、' ResolveUnregisteredType'イベントで即座に登録を作成するため、少し違って動作します... 'RegisterSingleOpenGeneric'メソッドのロジックを置き換えることなく、どうやってそれを行うことができるか考えなければなりません。しかし、私はスキャンの仕組みとジェネリックタイプの登録方法の詳細を指定するフォローアップの質問をお願いします。 – nemesv
私は@nemesvに同意します:これらの詳細について新しい質問をしてください。この回答は正しいです。それに対して+1。 – Steven