使用autoface解析控制器时出现依赖错误
本文关键字:依赖 错误 控制器 autoface 使用 | 更新日期: 2023-09-27 18:18:35
我正在开发一个ASP。MVC应用程序。我使用autoface进行DI。我的控制器PayrollCenterReportsController放置在assembly 'LK.Reports.Services.WebApi。
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>>();
...
}
}
和全局。当我使用我的初始化式时:
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>();
但是在page i get error:
出现错误。尝试创建类型为的控制器时发生错误"PayrollCenterReportsController"。确保控制器有无参数公共构造函数。系统。InvalidOperationException在System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (HttpRequestMessageHttpControllerDescriptor, TypecontrollerType)System.Web.Http.Controllers.HttpControllerDescriptor.CreateController (HttpRequestMessage请求)System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext ()错误有发生。类型"LK.Reports.Services.WebApi.Module.Controllers.PayrollCenterReportsController"没有默认构造函数系统。ArgumentException在System.Linq.Expressions.Expression。新(类型类型)在System.Web.Http.Internal.TypeActivator.Create [TBase](类型instanceType)System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator (HttpRequestMessage请求,类型controllerType, Func ' 1&激活)System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (HttpRequestMessageHttpControllerDescriptor, TypecontrollerType)
解决这个问题的唯一方法是显式地使用assembly和controller:
var a = typeof (PayrollCenterReportsController)
使用这段代码Autofac解决依赖关系和一切都很好。
加载装置
assembly = Assembly.Load("LK.Reports.Services.WebApi.Module, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
没有帮助
是否有任何方法来解决它没有显式使用typeof(PayrollCenterReportsController)在Global.asax?
如果你想避免显式注册所有控制器,你可以使用RegisterControllers
方法
builder.RegisterControllers(typeof(MvcApplication).Assembly);
可以接受多个程序集:
builder.RegisterControllers(AppDomain.CurrentDomain.GetAssemblies());
您可以在文档中找到更多信息:
顺便说一下,我建议使用IModule
代替您的自定义IAutofacIntitializer
接口。更多信息请参见文档
我刚刚遇到了一个类似的错误在我的方式得到OData进入MVC5项目。以下步骤帮助我启动并运行它:
-
使用Autofac。WebApi2的nuget包,而不是Autofac。WebApi包。(并卸载Autofac。在添加WebApi2之前添加WebApi2,这将节省您手动添加WebApi2到引用)
-
用
using Autofac.Integration.WebApi;
在您的Global.asax.cs(或任何您正在旋转Autofac的地方)中添加对WebApi2扩展的引用 MVC和WebApi使用独立的DI框架。对于MVC,用
builder.RegisterControllers
注册你的控制器。对于WebApi2 (OData)使用builder.RegisterApiControllers
.最后,设置你的DI解析器,一个用于MVC,一个用于WebApi2:
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); // MVC
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container); // WebApi2