dev*_*r82 14 c# asp.net autofac autofac-configuration
我知道它之前已经被问过并回答了 - 我问的原因是因为(我认为)我尝试了所有建议的解决方案来解决这个问题,但仍然无法解决它.
我有一个ASP.NET Web API 2.0项目.我有Autofac
,Autofac.Mvc5
并Autofac.WebApi2
安装了依赖项.当我尝试调用API控制器时,我收到以下错误:
尝试创建"MyController"类型的控制器时发生错误.确保控制器具有无参数的公共构造函数.
在我Global.asax
的电话中IocConfig.Config()
,我已将其置于其中App_Start
:
public static class IocConfig
{
public static void Config()
{
var builder = new ContainerBuilder();
builder.RegisterType<MyLogger>().As<IMyLogger>();
builder.RegisterApiControllers(Assembly.GetCallingAssembly());
builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
WebApiApplication.Container = builder.Build();
DependencyResolver.SetResolver(
new AutofacDependencyResolver(WebApiApplication.Container));
GlobalConfiguration.Configuration.DependencyResolver =
new AutofacWebApiDependencyResolver(WebApiApplication.Container);
}
}
Run Code Online (Sandbox Code Playgroud)
这是以下构造函数MyController
:
public MyController(IMyLogger logger)
Run Code Online (Sandbox Code Playgroud)
当我尝试调用它时,我得到有关构造函数的指定错误.我错过了什么?
Sco*_*ttB 19
我也遇到了这个错误,根本原因是在Autofac中没有正确注册Controller的一个依赖项.
InnerException有详细信息(在我的例子中是一个Autofac.Core.DependencyResolutionException),ExceptionMessage包含了这个依赖项的细节.沿着:
"激活特定注册期间发生错误...无法解析参数'XXXX'
neu*_*t47 12
检查这个答案.
它帮助我ContainerBuilder()
为WebApi控制器配置正确.
如果您在此处查找此类错误的解决方案,则应首先检查DependencyResolver配置.
我遇到了同样的问题,问题是我使用Autofac代码示例ContainerBuilder()
作为MVC控制器的对象,而不是API.
我的代码用于注册两种类型的控制器(MVC和Api):
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly()); //Register MVC Controllers
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); //Register WebApi Controllers
builder.RegisterType<Type>().As<IType>();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); //Set the MVC DependencyResolver
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver((IContainer)container); //Set the WebApi DependencyResolver
Run Code Online (Sandbox Code Playgroud)
我认为您缺少在应用程序启动代码中注册 autofac 。
用这个:
protected void Application_Start()
{
IocConfig.Config();
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅此博客http://www.codeproject.com/Articles/808894/IoC-in-ASP-NET-MVC-using-Autofac
归档时间: |
|
查看次数: |
18192 次 |
最近记录: |