【发布时间】:2025-08-21 06:00:02
【问题描述】:
我正在尝试将 SignalR IHubContext 注入 ASP.NET MVC 5 应用程序框架 4.72(不是 .NET Core)中的 Web API 2.x 控制器。调用Web API控制器MyController时抛出此异常:
尝试创建类型为“MyController”的控制器时发生错误。确保控制器有一个无参数的公共构造函数
内部异常说:
无法使用可用的服务和参数调用类型为“MyController”的“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”的构造函数:无法解析参数“Microsoft.AspNet.SignalR.IHubContext
[MyHub] context' of constructor 'Void .ctor(Microsoft.AspNet.SignalR.IHubContext[ MyHub])'。
我不介意使用属性注入来执行此操作,但没有任何运气让它发挥作用。所以我正在注入控制器的c'tor。
我已按照以下答案寻求帮助:
- https://*.com/a/37913821/177416 --> c'tor 注入
- https://*.com/a/29793864/177416 --> c'tor 注入
- https://*.com/a/26810399/177416 --> 属性注入
- https://*.com/a/15600493/177416 --> 属性注入
这是 Web API 控制器:
public class MyController : WebApiController
{
public IHubContext<MyHub> Context { get; set; }
public MyController(IHubContext<MyHub> context)
{
Context = context;
}
}
这是Startup.cs的相关部分:
public void Configuration(IAppBuilder app)
{
// Other code...
var builder = new ContainerBuilder();
var config = new HttpConfiguration();
builder.RegisterHubs(Assembly.GetExecutingAssembly());
builder.RegisterControllers(typeof(MvcApplication).Assembly)
.InstancePerRequest();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly())
.InstancePerRequest();
builder.RegisterType<AutofacDependencyResolver>()
.As<IDependencyResolver>()
.SingleInstance();
builder
.Register(c => c.Resolve<IConnectionManager>().GetHubContext<MyHub>())
.Named<IHubContext>("MyHub");
builder.RegisterType<MyController>()
.WithParameter(
new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(IHubContext),
(pi, ctx) => ctx.ResolveNamed<IHubContext>("MyHub")
)
);
var container = builder.Build();
app.UseAutofacMiddleware(container);
DependencyResolver.SetResolver(new Autofac.Integration.Mvc.AutofacDependencyResolver(container));
config.DependencyResolver = new AutofacWebApiDependencyResolver((IContainer)container);
app.Map("/signalr", map =>
{
var hubConfiguration = new HubConfiguration
{
Resolver = new AutofacDependencyResolver(container),
};
map.RunSignalR(hubConfiguration);
});
}
我错过了什么?谢谢。
【问题讨论】:
标签: c# asp.net asp.net-web-api dependency-injection autofac