【问题标题】:ASP .Net Core Web APIs Dependency Injection Class with Multiple Constructors [duplicate]具有多个构造函数的 ASP .Net Core Web API 依赖注入类 [重复]
【发布时间】:2020-04-25 03:56:46
【问题描述】:

我正在使用带有内置 DI 的 Asp .net core 2.2。我想注入具有多个满足容器条件的构造函数的服务。而且我无法删除其他构造函数以实现向后兼容性。示例代码:

public interface IService{
   void DoSomthing();
}

public class Implementation : IService
{
    public Implementation(IService1 service1)
    {

    }

    public Implementation(IService1 service1, IService2 service2)
    {

    }

    public void DoSomthing()
    {
        // Do something
    }
}

我在 DI 容器示例中注册了所有这些服务:

services.AddScoped<IService, Implementation>();

现在我有了另一个使用 IService 作为 DI 的类:

public class ClassA : IService
{
    public ClassA(IService service)
    {

    }
}

依赖注入容器如何使用哪个构造函数初始化这个类?:

public Implementation(IService1 service1)
Or
public Implementation(IService1 service1, IService2 service2)

它们之间的选择规则是什么?

【问题讨论】:

    标签: c# .net asp.net-core dependency-injection


    【解决方案1】:

    如果你只绑定IService1,它将调用只接受IService1的构造函数。如果你还绑定了IService2,它会用IService2调用构造函数。如果你有一个类(比如你的ClassA)只有一个构造函数,它只接受IService1,那么无论你是否绑定了IService2,它都会调用该构造函数。

    【讨论】:

    • 我需要两者都绑定。
    • 然后它会调用接受两者的构造函数。
    • 所以规则是调用具有大量已实现参数的构造函数?谢谢。
    猜你喜欢
    • 2016-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    相关资源
    最近更新 更多