找不到可用的服务和参数Autofac调用的构造函数 [英] None of the constructors found can be invoked with the available services and parameters Autofac

查看:1055
本文介绍了找不到可用的服务和参数Autofac调用的构造函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已阅读并编写了以下示例的代码: http://timschreiber.com/2015/01/14/persistence-ignorant-asp-net-identity-with-patterns-part-1/ 但是该示例使用Unity for DI,但是我使用Autofac作为ID,当我尝试运行我的项目时,出现以下错误:

I have read and coding follow example: http://timschreiber.com/2015/01/14/persistence-ignorant-asp-net-identity-with-patterns-part-1/ But that example used Unity for DI, but i'm used Autofac for ID, when i try run my project i have the following error:

在类型上均未找到'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'的构造函数 可以使用 可用的服务和参数:无法解析参数 "Microsoft.AspNet.Identity.UserManager 2[IdentityStore.IdentityUser,System.Guid] userManager' of constructor 'Void .ctor(Microsoft.AspNet.Identity.UserManager 2 [IdentityStore.IdentityUser,System.Guid])".

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.UserManager2[IdentityStore.IdentityUser,System.Guid] userManager' of constructor 'Void .ctor(Microsoft.AspNet.Identity.UserManager2[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));

}

任何人都可以帮助我!.

Any one help me please!.

推荐答案

错误消息告诉您 Autofac 无法创建HomeController的实例,因为它找不到其参数.

The error message tells you that Autofac can't create an instance of HomeController because it can't find its Microsoft.AspNet.Identity.UserManager<IdentityStore.IdentityUser,System.Guid> userManager parameter.

似乎该类型尚未注册.要解决此错误,您必须注册UserManager<IdentityUser, Guid>.您可以在IdentityModule类中完成此操作:

It seems that this type has not been registered. To solve this error you have to register a UserManager<IdentityUser, Guid>. You can do this in your IdentityModule class :

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

这篇关于找不到可用的服务和参数Autofac调用的构造函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆