C# Autofac与Owin/WebApi集成失败,无参数构造函数
我已经设置了一个mvc5.2 webapi项目,并添加了autofac和owin的所有依赖项 在我的startup类中,我有以下直接取自文档的代码 我所做的唯一更改是C# Autofac与Owin/WebApi集成失败,无参数构造函数,c#,asp.net-web-api,autofac,C#,Asp.net Web Api,Autofac,我已经设置了一个mvc5.2 webapi项目,并添加了autofac和owin的所有依赖项 在我的startup类中,我有以下直接取自文档的代码 我所做的唯一更改是RegisterApiTypes(builder) 公共类启动 { 公共无效配置(IAppBuilder应用程序) { var builder=new ContainerBuilder(); 注册资本类型(生成器); //标准WEB API设置: //获取您的HttpConfiguration。在OWIN中,您将创建一个 //而不是
RegisterApiTypes(builder)代码>
公共类启动
{
公共无效配置(IAppBuilder应用程序)
{
var builder=new ContainerBuilder();
注册资本类型(生成器);
//标准WEB API设置:
//获取您的HttpConfiguration。在OWIN中,您将创建一个
//而不是使用全局配置。
var config=新的HttpConfiguration();
//注册您的Web API控制器。
RegisterAppController(Assembly.getExecutionGassembly());
//运行其他可选步骤,如注册筛选器,
//每个控制器类型服务等,然后设置依赖项解析器
//是自动传真机。
var container=builder.Build();
config.DependencyResolver=新的AutoFacWebApidencyResolver(容器);
//OWIN WEB API设置:
//首先注册Autofac中间件,然后注册Autofac Web API中间件,
//最后是标准的webapi中间件。
app.useautofac中间件(容器);
app.UseAutofacWebApi(配置);
app.UseWebApi(配置);
}
专用静态无效注册表类型(ContainerBuilder builder)
{
builder.RegisterType()
.As()
.InstancePerRequest();
builder.RegisterType()
.As()
.InstancePerRequest();
}
}
启动类被调用,并且没有任何问题,但是当我尝试点击一个控制器时,我得到了
尝试创建“MyController”类型的控制器时出错。确保控制器具有无参数公共构造函数
我应该以不同的方式设置Startup.cs吗?您的电子邮件服务
和记录器
都有无参数构造函数吗?您能告诉我们MyController
的构造函数吗?
public class Startup
{
public void Configuration(IAppBuilder app)
{
var builder = new ContainerBuilder();
RegisterApiTypes(builder);
// STANDARD WEB API SETUP:
// Get your HttpConfiguration. In OWIN, you'll create one
// rather than using GlobalConfiguration.
var config = new HttpConfiguration();
// Register your Web API controllers.
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
// Run other optional steps, like registering filters,
// per-controller-type services, etc., then set the dependency resolver
// to be Autofac.
var container = builder.Build();
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
// OWIN WEB API SETUP:
// Register the Autofac middleware FIRST, then the Autofac Web API middleware,
// and finally the standard Web API middleware.
app.UseAutofacMiddleware(container);
app.UseAutofacWebApi(config);
app.UseWebApi(config);
}
private static void RegisterApiTypes(ContainerBuilder builder)
{
builder.RegisterType<Logger>()
.As<ILogger>()
.InstancePerRequest();
builder.RegisterType<EmailService>()
.As<IEmailService>()
.InstancePerRequest();
}
}