相当于 Ninject 的 WhenInjectedInto
Lightinject Equivalent of Ninject's WhenInjectedInto
LightInject 是否具有与 Ninject 的 WhenInjectedInto()
等效的方法? (Ninject - Contextual Binding)
例如,我有两个 类,比方说 MicrosoftOffice
和 LibreOffice
,它们实现了一个接口 IOfficeSuite
。另外两个 类、Windows
和 Linux
,实现另一个接口 IOperatingSystem
。后一个接口依赖于IOfficeSuite
.
我想根据上下文决定实例化哪个办公套件。因此,如果 LightInject 将 IOfficeSuite
实现注入到 Windows
对象中,它应该选择 MicrosoftOffice
;如果它是一个 Linux
对象,它应该注入一个 LibreOffice
实例。
谢谢
你有你想要做什么的例子吗?
我能够使用 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");
}
LightInject 是否具有与 Ninject 的 WhenInjectedInto()
等效的方法? (Ninject - Contextual Binding)
例如,我有两个 类,比方说 MicrosoftOffice
和 LibreOffice
,它们实现了一个接口 IOfficeSuite
。另外两个 类、Windows
和 Linux
,实现另一个接口 IOperatingSystem
。后一个接口依赖于IOfficeSuite
.
我想根据上下文决定实例化哪个办公套件。因此,如果 LightInject 将 IOfficeSuite
实现注入到 Windows
对象中,它应该选择 MicrosoftOffice
;如果它是一个 Linux
对象,它应该注入一个 LibreOffice
实例。
谢谢
你有你想要做什么的例子吗?
我能够使用 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");
}