2017-02-28 11 views
1

具体的なライフスタイルで具体的なタイプを登録する方法を探しています。シンプルインジェクターレジスターコンクリートタイプ(ライフスタイル付き)

public void SomeFunction(Type concrete, Lifestyle lifestyle) => 
    container.Register(concrete, lifestyle); 
+0

は、私はすでに私が何を探しています何のコードサンプルを提供してきましたより多くの情報 – r3wt

+0

を必要としますSimpleInjectorには一致する署名はありません。あなたが必要とする情報をもっと明確にすることができない限り、私は本当に多くの情報を提供することはできません。 –

答えて

2

それは単純なインジェクターに単一の1対1のマッピングを行うことになります、実際には1つの方法しかありません。

Container.Register(Type serviceType, Type implementationType, Lifestyle lifestyle); 

その他の方法はすべて便利ですこのメソッドには "err"または "shortcuts"があります。例えば、以下の方法:

Container.Register<TService, TImplementation>(Lifestyle) 

は、最終的にRegister(typeof(TService), typeof(TImplementation), lifestyle)を呼び出すことにより、非ジェネリック過負荷にフォールバックします。

同じことがLifestyleに取らないのオーバーロードのために保持している:

Container.Register<TService, TImplementation>() 

彼らはただ-underデフォルト構成 - である、与えられた実装タイプのために決定したライフスタイルを供給することにより、コールを転送されます一時的なライフスタイル:Register<TService, TImpementation>(Lifestyle.Transient)

、そのように具体的な種類のショートカット登録を許可する複数のオーバーロード、あります

Container.Register<TConcrete>() 

は、この方法はRegister<TConcrete, TConcrete>()への呼び出しを転送します。つまり、TServiceTImplementationの両方にTConcreteが指定されています。最終的にこの電話はRegister(typeof(TConcrete), typeof(TConcrete), Lifestyle.Transient)となります。

だから、長い話を短く、次のような方法は、あなたがライフスタイルに具体的なタイプを登録することができます:

Register<TConcrete>(Lifestyle.Scoped) 
Register<TConcrete, TConcrete>(Lifestyle.Scoped) 
Register(typeof(Concrete), typeof(Concrete), Lifestyle.Scoped); 
0

これは動作するはず

container.Register<SomeConcreteType,SomeConcreteType>(Lifestyle.Scoped); 

ライフスタイルがこれらのいずれかです。一時、スコープまたはシングルトン

+0

質問をもう一度見たいと思うかもしれません。コードサンプルはGenericsではないTypeを使用しています。 –

関連する問題