Asp.net web api Owin中间件无法向Autofac注册
在我的项目中,我正在使用web api 2 autofac,在我注入到它的控制器中,一切正常,直到我将Owin安装到项目中,当我运行项目并导航到抛出错误的控制器时: “尝试创建“AccountController”类型的控制器时出错。请确保该控制器具有无参数公共构造函数。” 这是我的密码: AccountController.cs:Asp.net web api Owin中间件无法向Autofac注册,asp.net-web-api,owin,autofac,Asp.net Web Api,Owin,Autofac,在我的项目中,我正在使用web api 2 autofac,在我注入到它的控制器中,一切正常,直到我将Owin安装到项目中,当我运行项目并导航到抛出错误的控制器时: “尝试创建“AccountController”类型的控制器时出错。请确保该控制器具有无参数公共构造函数。” 这是我的密码: AccountController.cs: [RoutePrefix("api/Account")] public class AccountController : ApiControllerBase {
[RoutePrefix("api/Account")]
public class AccountController : ApiControllerBase
{
private readonly IAccountService _accountService;
public AccountController(IAccountService accountService,
IEntityBaseRepository<Error> errorsRepository)
: base(errorsRepository)
{
_accountService = accountService;
}
// POST api/Account/Register
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(UserModel userModel)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
IdentityResult result = await _repo.RegisterUser(userModel);
IHttpActionResult errorResult = GetErrorResult(result);
if (errorResult != null)
{
return errorResult;
}
return Ok();
}
}
AutofacWebApiConfig.cs:
public class AutofacWebapiConfig
{
public static IContainer Container;
public static void Initialize(HttpConfiguration config)
{
Initialize(config, RegisterServices(new ContainerBuilder()));
}
public static void Initialize(HttpConfiguration config, IContainer container)
{
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}
private static IContainer RegisterServices(ContainerBuilder builder)
{
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
// EF BasicCommerceContext
builder.RegisterType<BasicCommerceContext>()
.As<DbContext>()
.InstancePerRequest();
builder.RegisterType<DbFactory>()
.As<IDbFactory>()
.InstancePerRequest();
builder.RegisterType<UnitOfWork>()
.As<IUnitOfWork>()
.InstancePerRequest();
builder.RegisterGeneric(typeof(EntityBaseRepository<>))
.As(typeof(IEntityBaseRepository<>))
.InstancePerRequest();
// Services
builder.RegisterType<EncryptionService>()
.As<IEncryptionService>()
.InstancePerRequest();
builder.RegisterType<MembershipService>()
.As<IMembershipService>()
.InstancePerRequest();
builder.RegisterType<ProductCategoryService>()
.As<IProductCategoryService>()
.InstancePerRequest();
builder.RegisterType<ProductService>()
.As<IProductService>()
.InstancePerRequest();
builder.RegisterType<NewsCategoryService>()
.As<INewsCategoryService>()
.InstancePerRequest();
builder.RegisterType<NewsService>()
.As<INewsService>()
.InstancePerRequest();
builder.RegisterType<CustomerService>()
.As<ICustomerService>()
.InstancePerRequest();
builder.RegisterType<StaticService>()
.As<IStaticService>()
.InstancePerRequest();
// Generic Data Repository Factory
builder.RegisterType<DataRepositoryFactory>()
.As<IDataRepositoryFactory>().InstancePerRequest();
Container = builder.Build();
return Container;
}
}
公共类AutofacWebapiConfig
{
公共静电集装箱;
公共静态无效初始化(HttpConfiguration配置)
{
初始化(配置,注册表服务(新的ContainerBuilder());
}
公共静态无效初始化(HttpConfiguration配置,IContainer容器)
{
config.DependencyResolver=新的AutoFacWebApidencyResolver(容器);
}
专用静态IContainer注册表服务(ContainerBuilder builder)
{
RegisterAppController(Assembly.getExecutionGassembly());
//EF BasicCommerceContext
builder.RegisterType()
.As()
.InstancePerRequest();
builder.RegisterType()
.As()
.InstancePerRequest();
builder.RegisterType()
.As()
.InstancePerRequest();
builder.RegisterGeneric(typeof(EntityBaseRepository))
.As(类型(IEntityBaseRepository))
.InstancePerRequest();
//服务
builder.RegisterType()
.As()
.InstancePerRequest();
builder.RegisterType()
.As()
.InstancePerRequest();
builder.RegisterType()
.As()
.InstancePerRequest();
builder.RegisterType()
.As()
.InstancePerRequest();
builder.RegisterType()
.As()
.InstancePerRequest();
builder.RegisterType()
.As()
.InstancePerRequest();
builder.RegisterType()
.As()
.InstancePerRequest();
builder.RegisterType()
.As()
.InstancePerRequest();
//通用数据存储库工厂
builder.RegisterType()
.As().InstancePerRequest();
Container=builder.Build();
返回容器;
}
}
请支持我向Autofac注册或配置OWIN
非常感谢。请按照以下步骤操作
public class AutofacWebapiConfig
{
public static IContainer Container;
public static void Initialize(HttpConfiguration config)
{
Initialize(config, RegisterServices(new ContainerBuilder()));
}
public static void Initialize(HttpConfiguration config, IContainer container)
{
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}
private static IContainer RegisterServices(ContainerBuilder builder)
{
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
// EF BasicCommerceContext
builder.RegisterType<BasicCommerceContext>()
.As<DbContext>()
.InstancePerRequest();
builder.RegisterType<DbFactory>()
.As<IDbFactory>()
.InstancePerRequest();
builder.RegisterType<UnitOfWork>()
.As<IUnitOfWork>()
.InstancePerRequest();
builder.RegisterGeneric(typeof(EntityBaseRepository<>))
.As(typeof(IEntityBaseRepository<>))
.InstancePerRequest();
// Services
builder.RegisterType<EncryptionService>()
.As<IEncryptionService>()
.InstancePerRequest();
builder.RegisterType<MembershipService>()
.As<IMembershipService>()
.InstancePerRequest();
builder.RegisterType<ProductCategoryService>()
.As<IProductCategoryService>()
.InstancePerRequest();
builder.RegisterType<ProductService>()
.As<IProductService>()
.InstancePerRequest();
builder.RegisterType<NewsCategoryService>()
.As<INewsCategoryService>()
.InstancePerRequest();
builder.RegisterType<NewsService>()
.As<INewsService>()
.InstancePerRequest();
builder.RegisterType<CustomerService>()
.As<ICustomerService>()
.InstancePerRequest();
builder.RegisterType<StaticService>()
.As<IStaticService>()
.InstancePerRequest();
// Generic Data Repository Factory
builder.RegisterType<DataRepositoryFactory>()
.As<IDataRepositoryFactory>().InstancePerRequest();
Container = builder.Build();
return Container;
}
}