我知道它之前已经被问过并回答了 - 我问的原因是因为(我认为)我尝试了所有建议的解决方案来解决这个问题,但仍然无法解决它.
我有一个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)
当我尝试调用它时,我得到有关构造函数的指定错误.我错过了什么?
我一直在使用autofac和MVC 3并且喜欢它.我最近将一个项目升级到MVC 4,除了Web Api ApiControllers之外,一切似乎都在工作.我收到以下异常.
An error occurred when trying to create a controller of type 'MyNamespace.Foo.CustomApiController'. Make sure that the controller has a parameterless public constructor.
Run Code Online (Sandbox Code Playgroud)
在我看来,这是DI通过autofac的问题.我是否遗漏了某些东西,或者是否有某些东西在工作中 我知道,MVC4刚出来并且是一个测试版,所以我没想到太多,但想到我可能会遗漏一些东西.
我正在使用依赖注入编写web api,在存储库的帮助下工作单元和Autofac作为容器.依赖性在24小时前被完美注入,但突然间,当我今天开始工作时,我一直收到错误
"消息":"发生错误.","ExceptionMessage":"尝试创建'SearchController'类型的控制器时发生错误.确保控制器具有无参数的公共构造函数.","ExceptionType":" System.InvalidOperationException"
我将包括我的签名以及我如何注册类型,如果有人可以指出我的代码可能出错,我将非常高兴.
在我的网络api控制器上,我有
private IUnitOfWork<Listing> _unitOfWork = null;
public SearchController(IUnitOfWork<Listing> unitOfWork)
{
_unitOfWork = unitOfWork;
}
Run Code Online (Sandbox Code Playgroud)
工作单元采用泛型类型参数来创建存储库.
在我的WebApiConfig.cs中,我正在注册以下类型
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
builder.RegisterGeneric(typeof(UnitOfWork<>)).As(typeof(IUnitOfWork<>)).InstancePerDependency();
builder.RegisterType(typeof(SearchController)).UsingConstructor(typeof(IUnitOfWork<Listing>));
Run Code Online (Sandbox Code Playgroud)
我正在注册SearchController以使用接受IUnitOfWork <>的构造函数.在我添加Mocked单元测试之前一切正常,但出于某种目的,我现在继续得到这个错误.我还注册了DependencyResolver
var container = builder.Build();
var resolver = new AutofacWebApiDependencyResolver(container);
config.DependencyResolver = resolver;
Run Code Online (Sandbox Code Playgroud) c# dependency-injection unit-of-work autofac asp.net-web-api2