У меня есть проект 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 ())); , Я не знаю, как его зарегистрировать.