Asp.net web api AutoFac不注册api控制器
我正在使用AutoFac注册api控制器,但不知道是什么问题 获取错误Asp.net web api AutoFac不注册api控制器,asp.net-web-api,repository-pattern,autofac,Asp.net Web Api,Repository Pattern,Autofac,我正在使用AutoFac注册api控制器,但不知道是什么问题 获取错误 Type 'myApp.WebAPI.Controllers.myController' does not have a default constructor 我添加了IocHelper类,如下所示 public class IocHelper { public static IContainer CreateContainer() { var builder = new ContainerBuilde
Type 'myApp.WebAPI.Controllers.myController' does not have a default constructor
我添加了IocHelper类,如下所示
public class IocHelper {
public static IContainer CreateContainer() {
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
return container;
}
}
提前感谢。请参考下面的解决方案,并确保您将注入的接口明确声明为公共接口。
Please refer the below solution, and also make sure you declared the injected interfaces as public explicitly.
//Global.asax file -Application Start method
protected void Application_Start()
{
var bootStrapApp = new BootstrapApplication()
.ConfigureRoute(GlobalConfiguration.Configuration)
.ConfigureContainer(new ContainerBuilder(), GlobalConfiguration.Configuration);
}
// BootstrapApplication.cs class file
public class BootstrapApplication
{
public BootstrapApplication ConfigureRoute(HttpConfiguration httpConfiguration)
{
httpConfiguration.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new { id = RouteParameter.Optional });
return this;
}
public BootstrapApplication ConfigureContainer(ContainerBuilder container, HttpConfiguration httpConfiguration)
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(n => n.FullName.StartsWith("<projectNamespacevalue>")).ToArray();
//projectNamespacevalue for ex. AspNet.WebApi2.Demo
// var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(n => n.FullName.StartsWith("AspNet")).ToArray();
container.RegisterAssemblyTypes(assemblies).AsImplementedInterfaces();
container.RegisterApiControllers(assemblies); //WebApi controllers scanning and registration
var ioccontainer = container.Build();
httpConfiguration.DependencyResolver = new AutofacWebApiDependencyResolver(ioccontainer);
return this;
}
}
//Global.asax文件-应用程序启动方法
受保护的无效应用程序\u Start()
{
var bootStrapApp=new BootstrapApplication()
.ConfigureRoute(GlobalConfiguration.Configuration)
.ConfigureContainer(新的ContainerBuilder(),GlobalConfiguration.Configuration);
}
//BootstrapApplication.cs类文件
公共类bootstrap应用程序
{
公共引导应用程序配置路由(HttpConfiguration HttpConfiguration)
{
httpConfiguration.Routes.MapHttpRoute(“DefaultApi”、“api/{controller}/{id}”、新的{id=RouteParameter.Optional});
归还这个;
}
公共引导应用程序配置容器(ContainerBuilder容器,HttpConfiguration HttpConfiguration)
{
var assemblies=AppDomain.CurrentDomain.GetAssemblies()。其中(n=>n.FullName.StartsWith(“”)。ToArray();
//ex.AspNet.WebApi2.Demo的projectNamespacevalue
//var assemblies=AppDomain.CurrentDomain.GetAssemblies()。其中(n=>n.FullName.StartsWith(“AspNet”).ToArray();
RegisterAssemblyTypes(assemblies).AsImplementedInterfaces();
container.RegisterAPI控制器(程序集);//WebApi控制器扫描和注册
var ioccontainer=container.Build();
httpConfiguration.DependencyResolver=新的AutofacWebApidencyResolver(ioccontainer);
归还这个;
}
}
您正在调用IocHelper.CreateContainer
?是的,我调用IocHelper.CreateContainer()代码>在startup.cs类中。这是您所有的容器注册代码吗?您在哪里注册控制器的依赖项?您是在startup.cs还是在Global.asax中设置web api?我们能看到startup.cs文件吗?多亏了大家,我们才解决了这个问题。我用owin在startup.cs文件中做了很多事情,因此通过在startup.cs中调用Iocahelper,我通常只在startup.cs文件中注册我的所有模块,并更改以下内容:GlobalConfiguration.Configuration.dependencysolver=new autofacwebapidpendencysolver(container)代码>收件人:config.DependencyResolver=新的AutoFacWebAPIDpendencyResolver(容器)
并添加了以下内容:appBuilder.UseAutofacWebApi(config)代码>您能否添加更多详细信息,说明这将如何解决问题?