在application_start()
我有以下代码。
当帐户控制器被创建时,我得到无参数构造函数错误。
AccountController没有无参数构造函数。似乎不再配置autofac?
帐户控制器期待以下内容。
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));
答案 0 :(得分:4)
在调用.Build
方法之前,您需要注册包含控制器的程序集:
builder.RegisterControllers(typeof(MvcApplication).Assembly);
var container = builder.Build();
在这个例子中,我假设您的应用程序类被称为MvcApplication
并进行了组装。如果您的控制器是在不同的程序集中定义的,则应指定此程序集。
documentation of AutoFac
有一个你可以经历过的例子。
答案 1 :(得分:0)
尝试在调用builder.Build方法之前添加它:
builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource(x => !(x.IsValueType) && !(x.IsAssignableFrom(typeof(string)))));