use*_*794 7 .net c# asp.net-mvc asp.net-core
如果一个类有两个构造函数,当我在 ConfigureServices 中注册该服务时,服务容器如何选择使用哪一个?
所以可以说我有一个MyClass用相应的接口调用的类IMyClass。在ConfigureServices()我调用以下代码行的方法中
services.AddScoped<IMyClass, MyClass>();
Run Code Online (Sandbox Code Playgroud)
如果我有以下构造函数,它如何选择要使用的构造函数?
MyClass(ILogger logger)
MyClass(ILogger logger, IConfguration configuration)
Run Code Online (Sandbox Code Playgroud)
构造函数匹配由称为CallSiteFactory:CreateConstructorCallSite的方法执行。根据其源代码,算法如下:
为了澄清何时可能存在歧义,请考虑以下因素:
MyClass(ILogger logger)
MyClass(IConfguration configuration)
Run Code Online (Sandbox Code Playgroud)
DI 引擎无法决定使用哪一个,因为两者都有可以注入的有效参数。
但是,在以下情况下,没有歧义,因为int类型未在 DI 引擎中注册,因此无法通过 DI 注入,因此将选择第一个 ctor:
MyClass(ILogger logger)
MyClass(int i)
Run Code Online (Sandbox Code Playgroud)
所以回答你的问题:在你的情况下,将使用第二个构造函数。
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |