我正在使用以下代码注册我的所有控制器:
protected override void Load(ContainerBuilder builder)
{
builder.RegisterControllers(typeof(MvcApplication).Assembly)
.OnActivated(a => a.Context.InjectUnsetProperties(a.Instance))
.OnActivating(InjectInvoker);
}
private static void InjectInvoker(IActivatingEventArgs<object> obj)
{
var invoker = obj.Context.ResolveOptional<IActionInvoker>();
if (invoker != null)
{
((Controller)obj.Instance).ActionInvoker = invoker;
}
}
但现在我有一个控制器,它采用 2 个相同类型的接口:
builder.Register(c => new RestClient(Url1))
.Named<IRestClient>("Url1")
.InstancePerLifetimeScope();
builder.Register(c => new RestClient(Url2))
.Named<IRestClient>("Url2")
.InstancePerLifetimeScope();
public HomeController(IRestClient r1, IRestClient r2)
我收到以下错误:无法使用可用的服务和参数调用类型“Site.Controllers.HomeController”上的“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”的构造函数:无法解析参数“RestSharp.IRestClient r1” ' 的构造函数 'Void .ctor(RestSharp.IRestClient, RestSharp.IRestClient)'。这是我所期望的,所以我尝试添加以下代码:
builder.Register(
c =>
new HomeController(
c.ResolveNamed<IRestClient>("Url1"),
c.ResolveNamed<IRestClient>("Url2")))
.As<IController>()
.InstancePerLifetimeScope();
然后我又遇到了同样的错误。
那么在这种情况下注册控制器的正确方法是什么?谢谢。