1

У меня есть пример чтения и кодирования: http://timschreiber.com/2015/01/14/persistence-ignorant-asp-net-identity-with-patterns-part-1/ Но в этом примере используется Unity для DI, но я использую Autofac для ID, когда я пытаюсь запустить мой проект у меня есть следующее сообщение об ошибке:Ни один из найденных конструкторов не может быть вызван доступными службами и параметрами Autofac

None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'App.Front.Controllers.HomeController' can be invoked with the available services and parameters: Cannot resolve parameter 'Microsoft.AspNet.Identity.UserManager 2[IdentityStore.IdentityUser,System.Guid] userManager' of constructor 'Void .ctor(Microsoft.AspNet.Identity.UserManager 2[IdentityStore.IdentityUser,System.Guid])'.

Мой код:

public class IdentityModule : Module 
{ 
    protected override void Load(ContainerBuilder builder) 
    { 
     //var dbContextParameter = new ResolvedParameter((pi, ctx) => pi.ParameterType == typeof(DbContext), 
     //            (pi, ctx) => ctx.Resolve<AppContext>()); 
     builder.RegisterType<UserStore>().As<IUserStore<IdentityUser, Guid>>().InstancePerLifetimeScope(); 
     builder.RegisterType<RoleStore>().InstancePerLifetimeScope(); 
    } 
} 

и

private static void SetAutofacContainer() 
{ 
    var builder = new ContainerBuilder(); 
    var mainModules = BuildManager.GetReferencedAssemblies().Cast<Assembly>().Where(p => p.ManifestModule.Name.StartsWith("App.")).ToArray(); 
    builder.RegisterControllers(mainModules); 
    builder.RegisterAssemblyModules(mainModules); 

    builder.RegisterFilterProvider(); 
    builder.RegisterSource(new ViewRegistrationSource()); 

    builder.RegisterModule(new EFModule()); 
    builder.RegisterModule(new RepositoryModule()); 
    builder.RegisterModule(new IdentityModule()); 
    builder.RegisterModule(new ServiceModule()); 
    var container = builder.Build(); 
    DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

} 

Любой мне поможет!

+0

Я действительно мог использовать все модули, которые вы использовали для настройки Identity через AutoFac. По какой-то причине моя реализация испытывает ту же проблему, но я почти ничего не знаю о AutoFac; особенно, как настроить его. –

ответ

1

сообщения об ошибке говорит, что Autofac не может создать экземпляр HomeController, потому что он не может найти свой параметр Microsoft.AspNet.Identity.UserManager<IdentityStore.IdentityUser,System.Guid> userManager.

Похоже, что этот тип не был зарегистрирован. Чтобы решить эту ошибку, вам необходимо зарегистрировать UserManager<IdentityUser, Guid>. Вы можете сделать это в своем классе IdentityModule:

builder.RegisterType<UserManager<IdentityUser, Guid>>() 
     .As<UserManager<IdentityUser, Guid>>() 
     .InstancePerRequest(); 
+0

Спасибо за вашу помощь, мой код работает сейчас, но я удивляюсь этому примеру, свой собственный пользовательский класс UserStore, если я использую ваш код, мой проект работает сейчас, но когда я создаю и вхожу в систему, у меня есть код ошибки: [ InvalidOperationException: UserId не найден.] Мой код Signin var identity = await _userManager.CreateIdentityAsync (пользователь, DefaultAuthenticationTypes.ApplicationCookie); –

+0

@ TrườngSơn Я не уверен, что понял. Не могли бы вы изменить свой вопрос и объяснить свою проблему? –

+0

Я столкнулся с той же проблемой, но это осложняется тем фактом, что я использую шаблон MVC HTML5, который уже включает AutoFac и который не использует шаблон OP. Когда я пытаюсь включить решение из @CyrilDurand, это не сработает. Совершенно новый для DI, полностью потерянный. –

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