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

InvalidOperationException:在类型""MyNameSpace.MyTagHelper""中找到多个接受所有给定参数类型的构造函数.""应该只有一个适用的构造函数.

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

有什么方法可以让ASP.NET5依赖注入框架 Select 特定的构造函数吗?通常这是通过使用属性来完成的,但是我找不到任何东西.

我的用例是,我试图创建一个既是TagHelper又是HTML Helper的类,如果这个问题得到解决,这是完全可能的.

推荐答案

Illya是对的:内置解析器不支持expose 多个构造函数的类型...但是,没有什么可以阻止您注册代理以支持此场景:

services.AddScoped<IService>(provider => {
    var dependency = provider.GetRequiredService<IDependency>();

    // You can select the constructor you want here.
    return new Service(dependency, "my string parameter");
});

如其他答案所示,在更高版本中增加了对多个构造函数的Note:支持.现在,DI堆栈将愉快地 Select 它能解析的参数最多的构造函数.例如,如果你有两个构造函数——一个有3个参数指向服务,另一个有4个参数——它会更喜欢有4个参数的构造函数.

Asp.net相关问答推荐

缓存httpmessage内容

SignalR + Autofac + OWIN:为什么 GlobalHost.ConnectionManager.GetHubContext 不起作用?

httpCompression 和 urlCompression 有什么区别?

在 appSettings 中存储字符串数组?

如何使用特定视图(不是控制器名称)返回 ActionResult

不支持关键字:服务器

如何使用文件上传控件 Select 多个文件?

如何在 ASP.NET Web API 中使用非线程安全的 async/await API 和模式?

你如何确定哪个验证器失败了?

为什么我不能在 ASP.net MVC 中使用服务器控件?

ASP.NET RadioButton 与名称(组名)混淆

将通用列表绑定到转发器 - ASP.NET

在asp.net mvc 3中实现FilterAttribute,IActionFilter和从ActionFilterAttribute继承有什么区别?

显示 ModalPopupExtender 时如何指定要运行的 javascript

HttpResponse.End 或 HttpResponse.Close 与 HttpResponse.SuppressContent

当.NET抛出WebException((400)错误请求)时如何处理WebResponse?

如何将参数传递给 ASP.NET MVC 2 中的自定义 ActionFilter?

x-powered by是什么意思?

在控制器 asp.net-core 中获取当前区域性

Visual Studio 2013 ASP.NET 项目中 Antlr 包的用途是什么?