Asp.net web api Owin中间件无法向Autofac注册

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 {

在我的项目中,我正在使用web api 2 autofac,在我注入到它的控制器中,一切正常,直到我将Owin安装到项目中,当我运行项目并导航到抛出错误的控制器时: “尝试创建“AccountController”类型的控制器时出错。请确保该控制器具有无参数公共构造函数。” 这是我的密码:

AccountController.cs:

[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


非常感谢。

请按照以下步骤操作

  • 从NuGet中引用Autofac.Owin包
  • 构建您的Autofac容器
  • 向OWIN注册Autofac中间件并将其传递给容器
  • 文件可用

    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;
        }
    }