【发布时间】:2016-01-01 02:42:39
【问题描述】:
我的 ASP.NET Core 应用程序中有一个带有多个构造函数的标签助手。当 ASP.NET 5 尝试解析类型时,这会在运行时导致以下错误:
InvalidOperationException:在类型“MyNameSpace.MyTagHelper”中发现了多个接受所有给定参数类型的构造函数。应该只有一个适用的构造函数。
其中一个构造函数是无参数的,另一个有一些参数不是注册类型的参数。我希望它使用无参数构造函数。
有没有办法让 ASP.NET 5 依赖注入框架选择特定的构造函数?通常这是通过使用属性来完成的,但我找不到任何东西。
我的用例是我正在尝试创建一个既是 TagHelper 又是 HTML 助手的类,如果解决了这个问题,这是完全可能的。
【问题讨论】:
-
您的注射剂应该只有一个构造函数。有multiple constructors is an anti-pattern.
-
是的,这并不理想。我会想出一个变通办法。
-
如果您完整阅读the article,您会发现答案很简单。如果您控制的类型:删除一个构造函数。如果此
MyTagHelper是第三方或框架类型,请使用工厂委托注册它并调用该委托中的特定构造函数。 -
好奇是否有办法针对库中所有控制器的此错误进行单元测试。
标签: asp.net dependency-injection asp.net-core asp.net-core-mvc