【发布时间】:2015-10-20 14:24:03
【问题描述】:
我正在开发一个 ASP.MVC 应用程序。我将 Autofac 用于 DI。我的控制器 PayrollCenterReportsController 放置在程序集“LK.Reports.Services.WebApi.Module”中,并且需要在构造函数中提供一些服务:
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>>();
...
}
}
在 Global.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>();
但是在页面我得到错误:
发生错误。 尝试创建类型控制器时出错 '工资中心报告控制器'。确保控制器具有 无参数的公共构造函数。 System.InvalidOperationException 在 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage 请求,HttpControllerDescriptor 控制器描述符,类型 控制器类型)在 System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage 请求)在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext() 有一个错误 发生了。类型 'LK.Reports.Services.WebApi.Module.Controllers.PayrollCenterReportsController' 没有默认构造函数 System.ArgumentException 在 System.Linq.Expressions.Expression.New(类型类型) System.Web.Http.Internal.TypeActivator.Create[TBase](类型 实例类型)在 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage 请求,类型控制器类型,Func`1& 激活器)在 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage 请求,HttpControllerDescriptor 控制器描述符,类型 控制器类型)
解决它的唯一方法是显式使用带有控制器的程序集:
var a = typeof (PayrollCenterReportsController)
使用此代码 Autofac 解决依赖关系,一切正常。
加载程序集
assembly = Assembly.Load("LK.Reports.Services.WebApi.Module, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
没有帮助
有什么方法可以在不明确使用 Global.asax 中的 typeof(PayrollCenterReportsController) 的情况下解决它?
【问题讨论】: