2012-12-13 41 views
1

我有一個包含Mvc控制器和Web Api控制器的項目。 一切都連接好使用autofac 3:Autofac v3,Web Api和Authorize屬性

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

的問題是,當我添加[授權]屬性(一個從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. 

人指向正確的方向?

謝謝。

+0

這仍然是一個問題?刪除AnyConcreteTypeNotAlreadyRegisteredSource是否工作? –

回答

2

道歉,這是一個猜測有點的,但AnyConcreteTypeNotAlreadyRegisteredSourcehere看起來過於寬泛登記:

提供的On-the-飛尚未與註冊的任何具體類型註冊容器。

Autofac Filter Provider然後可以註冊所有類型的框架具體類型並陷入混亂。

這可能是,如果你把它拿出來,並提交更有針對性的註冊,它會有所幫助,也許會按照慣例註冊。

+0

同意 - 嘗試刪除,看看會發生什麼。 –

+0

嗨,對於最近的答案抱歉。不,刪除不起作用,我仍然得到相同的錯誤。問題是我也有沒有接口的類,但我也想注入這些類。我怎麼能通過約定來配置這個? – sirrocco

+0

經過一段時間後回到此處,意識到我可以使用第二個構造函數過濾由AnyConcreteTypeNotAlreadyRegisteredSource註冊的類型。謝謝。 – sirrocco