gpt4 book ai didi

具有多个构造函数的 ASP.NET Core 依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-02 08:58:56 26 4
gpt4 key购买 nike

我的 ASP.NET Core 应用程序中有一个带有多个构造函数的标记帮助器。当 ASP.NET 5 尝试解析类型时,这会在运行时导致以下错误:

InvalidOperationException: Multiple constructors accepting all given argument types have been found in type 'MyNameSpace.MyTagHelper'. There should only be one applicable constructor.

其中一个构造函数是无参数的,另一个构造函数有一些参数,这些参数的参数不是注册类型。我希望它使用无参数构造函数。

是否有某种方法可以让 ASP.NET 5 依赖注入(inject)框架选择特定的构造函数?通常这是通过使用属性来完成的,但我找不到任何东西。

我的用例是,我正在尝试创建一个既是 TagHelper 又是 HTML 帮助器的类,如果这个问题得到解决,这是完全可能的。

最佳答案

应用ActivatorUtilitiesConstructorAttribute到您希望 DI 使用的构造函数:

[ActivatorUtilitiesConstructor]
public MyClass(ICustomDependency d)
{
}

这需要使用ActivatorUtilities类来创建您的MyClass。从 .NET Core 3.1 开始,Microsoft 依赖项注入(inject)框架在内部使用 ActivatorUtilities;在旧版本中,您需要手动使用它:

services.AddScoped(sp => ActivatorUtilities.CreateInstance<MyClass>(sp));

关于具有多个构造函数的 ASP.NET Core 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32931716/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com