1

LightInject 是否有与 Ninject 等效的方法WhenInjectedInto()?( Ninject - 上下文绑定)

例如,我有两个类,比如说MicrosoftOfficeLibreOffice,它们实现了一个 interface IOfficeSuite。另外两个类WindowsLinux实现另一个接口IOperatingSystem。后一个接口依赖于IOfficeSuite.

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

谢谢

4

2 回答 2

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");
    }
于 2015-08-11T18:11:20.143 回答
0

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

于 2015-08-11T10:54:16.280 回答