LightInject是否具有Ninject WhenInjectedInto()
的等效方法? (Ninject - Contextual Binding)
例如,我有两个实现接口MicrosoftOffice
的类,比如说LibreOffice
和IOfficeSuite
。另外两个类Windows
和Linux
实现了另一个接口IOperatingSystem
。后一种界面取决于IOfficeSuite
。
我想根据上下文决定要实例化哪个办公套件。因此,如果LightInject将IOfficeSuite
实现注入Windows
对象,则应选择MicrosoftOffice
;如果它是Linux
对象,它应该注入一个LibreOffice
实例。
由于
答案 0 :(得分:1)
我能够使用RegisterConstructorDependency
来解决它:
Container.RegisterConstructorDependency((factory, parameterInfo) => DecideImplementationByDeclaringType(factory, parameterInfo));
private static IInterface DecideImplementationByDeclaringType(IServiceFactory factory, ParameterInfo parameterInfo)
{
var declaringType = parameterInfo.Member.DeclaringType;
if (declaringType == typeof (SomeClass))
{
return factory.GetInstance<IInterface >("OtherImplementation");
}
return factory.GetInstance<IInterface >("DefaultImplementation");
}
答案 1 :(得分:0)
你有一个你想要做的例子吗?