我正在開發一個ASP.MVC應用程序。我使用Autofac進行DI。我的控制器以組裝 'LK.Reports.Services.WebApi.Module' PayrollCenterReportsController的地方,需要在構造一些serivce:用autofac解析控制器時的依賴性錯誤
public class PayrollCenterReportsController : ODataControllerBase<PayrollCenterReports>
{
public PayrollCenterReportsController(IDataService<PayrollCenterReports> service)
: base(service)
{
}
}
我在其他裝配
public class MenaAutofacInitializer : IAutofacIntitializer
{
public void Initialize(ContainerBuilder builder)
{
...
builder.RegisterType<PayrollCenterReportsClientService>().As<IDataService<PayrollCenterReports>>();
...
}
}
,並在全球註冊serivce。 ASAX我用我的初始化:
var builder = new ContainerBuilder();
new MenaAutofacInitializer().Initialize(builder);
var container = builder.Build();
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
SiteMaps.Loader = container.Resolve<ISiteMapLoader>();
但在頁我得到錯誤:
An error has occurred. An error occurred when trying to create a controller of type 'PayrollCenterReportsController'. Make sure that the controller has a parameterless public constructor. System.InvalidOperationException at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request) at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext() An error has occurred. Type 'LK.Reports.Services.WebApi.Module.Controllers.PayrollCenterReportsController' does not have a default constructor System.ArgumentException at System.Linq.Expressions.Expression.New(Type type) at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
只有這樣,才能解決這個問題是使用組裝與控制器明確:
var a = typeof (PayrollCenterReportsController)
有了這個代碼Autofac依賴的決心和所有的罰款。
裝載組件
assembly = Assembly.Load("LK.Reports.Services.WebApi.Module, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
沒有幫助
有什麼辦法解決它,而不在Global.asax中explitly使用typeof(PayrollCenterReportsController)?