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 过滤器提供程序可能会注册各种框架具体类型并陷入混乱。

如果您将其取出并进行更有针对性的注册,这可能会有所帮助,也许可以按惯例注册。

于 2012-12-14T10:12:06.223 回答