1

私はapplication_start()次のコードを持っています。アカウント コントローラーが作成されると、パラメーターなしのコンストラクター エラーが発生します。AccountController には、パラメーターなしのコンストラクターがありません。autofac が構成されていないようです。

Account Controller は次のことを想定しています。

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));
4

2 に答える 2

4

.Buildメソッドを呼び出す前に、コントローラーを含むアセンブリを登録する必要があります。

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

この例では、アプリケーション クラスが呼び出されMvcApplication、そのアセンブリを取得したと想定しています。コントローラーが別のアセンブリで定義されている場合は、このアセンブリを指定する必要があります。

には、documentation of AutoFac経験した可能性のある例があります。

于 2013-02-17T09:54:28.400 に答える
0

build.Build メソッドを呼び出す前に、これを追加してみてください。

builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource(x => !(x.IsValueType) && !(x.IsAssignableFrom(typeof(string)))));
于 2016-05-05T15:47:21.140 に答える