2016-12-28 2 views
0

В моем проекте я использую веб-api 2, autofac, в контроллере, который я ему вставляю, все работает нормально, пока я не установил Owin для проекта, когда я запускаю проект и перемещаюсь к контроллеру, который подал мне ошибку: «При попытке создать контроллер типа« AccountController »произошла ошибка. Убедитесь, что у контроллера нет конструктора без параметров». Вот мой код:Owin middleware не удалось зарегистрировать с помощью Autofac

В 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(); 
    } 
} 

Startup.cs:

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     ConfigureOAuth(app); 
     HttpConfiguration config = new HttpConfiguration(); 
     WebApiConfig.Register(config); 
     app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
     app.UseWebApi(config); 
    } 

    public void ConfigureOAuth(IAppBuilder app) 
    { 
     OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() 
     { 
      AllowInsecureHttp = true, 
      TokenEndpointPath = new PathString("/token"), 
      AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), 
      Provider = new SimpleAuthorizationServerProvider() 
     }; 

     // Token Generation 
     app.UseOAuthAuthorizationServer(OAuthServerOptions); 
     app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 

    } 

} 

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

Пожалуйста, поддержите меня зарегистрироваться или настроить OWIN с помощью Autofac.

спасибо.

ответ

0

Пожалуйста, выполните следующие действия:

  1. Ссылка пакет Autofac.Owin от NuGet.
  2. Создайте контейнер Autofac.
  3. Зарегистрируйте промежуточное ПО Autofac с помощью OWIN и передайте контейнер.

Документация доступна here

Смежные вопросы