我想注册所有实现的类型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 配置它?