Lightinject等效于Ninject的WhenInjectedInto

时间:2015-08-10 21:05:56

标签: light-inject

LightInject是否具有Ninject WhenInjectedInto()的等效方法? (Ninject - Contextual Binding

例如,我有两个实现接口MicrosoftOffice的类,比如说LibreOfficeIOfficeSuite。另外两个类WindowsLinux实现了另一个接口IOperatingSystem。后一种界面取决于IOfficeSuite

我想根据上下文决定要实例化哪个办公套件。因此,如果LightInject将IOfficeSuite实现注入Windows对象,则应选择MicrosoftOffice;如果它是Linux对象,它应该注入一个LibreOffice实例。

由于

2 个答案:

答案 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)

你有一个你想要做的例子吗?