ジェネリッククラスIManager
の型として使用できるように、実装しているすべての型を登録したいと考えています。T
Lazy<T>
例えば:
public TetraRadioPropertyUpdater(Lazy<IRadioManager> lazyRadioManager)
私の具象型とインターフェースは内部的なものであり、そのため組み込みの StructureMap スキャンメカニズムを使用できないため、自作のスキャナーを使用しています。
ループの最初のステートメントで、すべてのIManager
タイプを登録しますFor<IRadioManager>().Singleton().Use<RadioManager>()
同様に、ジェネリック型として使用できるように登録してLazy<T>
ほしいFor<Lazy<IRadioManager>().Use<Lazy<RadioManger>>()
InterfaceScanner<IManager> interfaceScanner = new InterfaceScanner<IManager>();
// managerMapping looks like:
// { IRadioManager, RadioManager }
// { ICallManager, CallManager }
// .. more manager interface to plugin type pairs
foreach (KeyValuePair<Type, Type> managerMapping in interfaceScanner.Process())
{
// the key is the plugin type, value is the concrete type
For(managerMapping.Key).Singleton().Use(managerMapping.Value);
// something like this.. ?
For(typeof(Lazy<>)).Singleton().Use(c => new Lazy(() => c.GetInstance(managerMapping.Value)));
}
これは可能ですか?StructureMap 用にどのように構成する必要がありますか?