ASP.NET Идентичность. Зарегистрируйте UserManager в Autofac - PullRequest
0 голосов
/ 10 мая 2018

У меня есть проект webapi, где я использую Autofac для внедрения зависимостей. Проблема в том, что я не могу понять, как зарегистрировать класс UserManager. Выкидывает ошибку "{The entity type ApplicationUser is not part of the model for the current context.} System.InvalidOperationException".

Пожалуйста, помогите.

В AutofacConfig.Configure ():

 builder.RegisterType<ApplicationDbContext>().As<IApplicationDbContext>().InstancePerRequest()
 builder.RegisterType<UserManager<ApplicationUser>>().InstancePerRequest();
 builder.RegisterType<UserStore<ApplicationUser>>().As<IUserStore<ApplicationUser>>().InstancePerRequest();

И вот как я это использую:

    public class UsersRepository : IUsersRepository<ApplicationUser>
    {
        public IApplicationDbContext DbInstance { get; }
        private UserManager<ApplicationUser> _userManager;
        private IUserStore<ApplicationUser> _userStore;

        public UsersRepository(IApplicationDbContext dbInstance, UserManager<ApplicationUser> userManager, IUserStore<ApplicationUser> userStore)
        {
            DbInstance = dbInstance;
            _userManager = userManager;
            _userStore = userStore;
        }

        public void Create(ApplicationUser user)
        {
            _userManager.Create(user);
            DbInstance.SaveChanges();
        }
    }

IUsersRepository:

public interface IUsersRepository<T> where T : class
{
    IApplicationDbContext DbInstance { get; }

    void Create(T model);
    void Update(string id, T model);
    void Delete(string id);
    List<T> GetAll();
    T Get(string id);
}

Я попробовал это решение: https://gist.github.com/danielok/9271691, но затем у меня возникает другая ошибка при первом обращении к пользователям контроллера webapi "ApplicationDbContext is not registered."

Сообщение:

    The requested service 'ToDoApp_Data.DbContext.ApplicationDbContext' has not been registered. To avoid this exception, either register a component to provide 
the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.

Трассировка стека:

       at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters)
   at Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context, IEnumerable`1 parameters)
   at Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context)
   at ToDoApp_Api.App_Start.AutofacConfig.<>c.<RegisterOthers>b__4_1(ParameterInfo pi, IComponentContext ctx) in D:\Dev\ToDoApp_Backend\ToDoApp_Api\App_Start\AutofacConfig.cs:line 58
   at Autofac.Core.ResolvedParameter.<>c__DisplayClass3_0.<CanSupplyValue>b__0()
   at Autofac.Core.Activators.Reflection.ConstructorParameterBinding.Instantiate()
   at Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters)
   at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters)

P.S. Я думаю, будет полезно сказать, что у меня есть другие контроллеры webapi, которые мне удалось заставить их работать с autofac, но учитывая, что перед использованием DI он был создан следующим образом: UserManager _userManager = new UserManager (new UserStore (new ApplicationDbContext ())); , Я не знаю, как его зарегистрировать.

...