无参数构造函数错误.(升级到autofac 3)

本文关键字:autofac 参数 构造函数 错误 | 更新日期: 2023-09-27 17:59:39

application_start()中,我有以下代码。当创建帐户控制器时,我会得到无参数构造函数错误。AccountController没有无参数构造函数。自动交流似乎不再配置了?

帐户控制器需要以下内容。

public AccountController(IFlexMembershipProvider membership, IFlexOAuthProvider openAuth)

我不知道为什么autofac没有注入依赖项?

var builder = new ContainerBuilder();
builder.RegisterType<DataContext>()
    .As<IRepository>()
    .As<DbContext>().InstancePerLifetimeScope();
builder.RegisterType<FlexMembershipProvider>().As<IFlexMembershipProvider>();
builder.RegisterType<FlexMembershipProvider>().As<IFlexOAuthProvider>();
builder.RegisterType<FlexRoleProvider>().As<IFlexRoleProvider>();
builder.RegisterType<UserStorage>().As<IFlexUserStore>().InstancePerLifetimeScope();
builder.RegisterType<RoleStorage>().As<IFlexRoleStore>().InstancePerLifetimeScope();
builder.RegisterType<DefaultSecurityEncoder>().As<ISecurityEncoder>().SingleInstance();
builder.RegisterType<AspnetEnvironment>().As<IApplicationEnvironment>();
builder.RegisterType<InvestorService>().As<IInvestorService>();
builder.RegisterType<InvestmentService>().As<IInvestmentService>();
builder.RegisterType<BrokerService>().As<IBrokerService>().As<IListService<Broker>>();
builder.RegisterType<PortfolioManagerService>().As<IListService<PortfolioManager>>();
builder.RegisterModelBinderProvider();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

无参数构造函数错误.(升级到autofac 3)

在调用.Build方法之前,您需要注册包含控制器的程序集:

builder.RegisterControllers(typeof(MvcApplication).Assembly);
var container = builder.Build();

在本例中,我假设您的应用程序类名为MvcApplication,并对其进行了汇编。如果控制器是在其他程序集中定义的,则应指定此程序集。

documentation of AutoFac有一个你本可以经历的例子。

在调用生成器之前尝试添加此项。构建方法:

builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource(x => !(x.IsValueType) && !(x.IsAssignableFrom(typeof(string)))));