1

Mvc コントローラーと Web Api コントローラーの両方を含むプロジェクトがあります。すべてが autofac 3 を使用して接続されています:

var builder = new ContainerBuilder();
        builder.Register(x => NHibernateConfigurator.BuildSessionFactory()).SingleInstance();
        builder.Register(x => x.Resolve<ISessionFactory>().OpenSession()).InstancePerHttpRequest();
        builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());

        builder.Register(x => new WebApiTransactionAttribute()).PropertiesAutowired();

        builder.RegisterControllers(Assembly.GetExecutingAssembly());
        builder.RegisterApiControllers(Assembly.GetExecutingAssembly());



        builder.RegisterType<ExtensibleActionInvoker>().As<IActionInvoker>();
        builder.RegisterWebApiFilterProvider(config);

        var container = builder.Build();

        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        config.DependencyResolver = new AutofacWebApiDependencyResolver(container);

問題は、[Authorize] 属性 (System.Web.Http のもの) を追加すると、次のようになることです。

Cannot choose between multiple constructors with equal length 1 on type 'System.String'. 
Select the constructor explicitly, with the UsingConstructor() configuration method, when the component is registered.

誰かが私を正しい方向に向けることができますか?

ありがとう。

4

1 に答える 1

2

申し訳ありませんが、これは多少の推測ですが、AnyConcreteTypeNotAlreadyRegisteredSource ここでは登録が広すぎる可能性があるようです。

コンテナにまだ登録されていないコンクリートタイプ登録をオンザフライで提供します。

Autofac Filter Providerは、あらゆる種類のフレームワークの具体的なタイプを登録し、混乱する可能性があります。

これを取り出して、より的を絞った登録を行うと、おそらく代わりに慣例に従って登録することが役立つかもしれません。

于 2012-12-14T10:12:06.223 に答える