我用下面的代碼用於註冊所有的控制器:MVC 4和autofac:DependencyResolutionException
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'的構造函數都沒有可用的服務和參數調用: 無法解析param eter'構造函數'Void .ctor(RestSharp.IRestClient,RestSharp.IRestClient)'的'RestSharp.IRestClient r1''。 我照做了期待,所以後來 我試着加入以下代碼:
builder.Register(
c =>
new HomeController(
c.ResolveNamed<IRestClient>("Url1"),
c.ResolveNamed<IRestClient>("Url2")))
.As<IController>()
.InstancePerLifetimeScope();
然後我再次得到了同樣的錯誤。
那麼在這種情況下注冊控制器的正確方法是什麼? 謝謝。
你的自定義控制器註冊應該在** RegisterControllers調用後執行,並且不需要'.As()'部分 –
nemesv
Url1和Url2從哪裏來,這些變量是什麼? – ryudice
該代碼是一個例子...變量從配置文件中設置,所以它會是Properties.Settings.Default.Url1 – sanjosep43