使用ActivatorUtilities确定在运行时注入哪个实现

问题描述 投票:0回答:1

请考虑以下代码:

public interface IService {}  

public class ServiceOne : IService {}  

public class ServiceTwo : IService {}  

public class SomeClass  
{  
    public SomeClass(IService service) {}  
}

我已经在.Net Core IoC容器中注册了我所有的依赖项,并且一切正常,但是我无法弄清楚如何使用ActivatorUtilities类注册上述内容,并根据已知条件使其注入正确的IService。在运行时。

更具体地说,当IoC实例化SomeClass时,将发生如下所示的事情:

if(condition1 && condition2)  
{  
    ActivatorUtilities.CreateInstance(ServiceOne);  
}
else  
{  
    ActivatorUtilities.CreateInstance(ServiceTwo);  
}

我一直在查看ActivatorUtilities.CreateFactory,但我不明白如何使用这两种方法来完成此任务。

我发现了解决方法,但是由于上下文的原因,我被要求使用ActivatorUtilities类专门找到解决方案。

谢谢。

c# .net-core ioc-container
1个回答
0
投票

尚不清楚您要实现什么,但我认为它是这样的?

services.AddTransient<IService>(sp =>
{
    if (condition1 && condition2)
        ActivatorUtilities.CreateInstance<ServiceOne>(sp);
    else
        ActivatorUtilities.CreateInstance<ServiceTwo>(sp);
});
© www.soinside.com 2019 - 2024. All rights reserved.