2013-03-18 16 views
2

我有一個使用StructureMap.MVC4的MVC4應用程序。這裏的IoC.csNPoco StructureMap.MVC4構造函數注入

ObjectFactory.Initialize(x =>{ 
x.Scan(scan =>{ 
    scan.TheCallingAssembly(); 
    scan.WithDefaultConventions();}); 

x.For<IDbContext>().Use<EfDbContext>().Ctor<string>("connectionStringName").Is("DefaultDb"); 
x.For<IDatabase>().Use<Database>().Ctor<string>("connectionStringName").Is("DefaultDb"); 

x.For<IActionInvoker>().Use<InjectingActionInvoker>(); 
x.SetAllProperties(c=>c.OfType<IDbContext>()); 
... ... 

的片段的DbContext注入正常工作,所以確實的setter注射ActionFilters,以及所有服務:使用IService默認約定。但我得到了以下錯誤試圖注入了IDatabase:

Could not find a constructor parameter or property for NPoco.Database, NPoco, Version=1.0.0.0, 
Culture=neutral, PublicKeyToken=null named connectionStringName Parameter name: name 

如果我將其更改爲

x.For<IDatabase>().Use(new Database("DefaultDb")); 

它的工作原理。任何想法爲什麼?我想知道如果使用New,它會結束一個不同的IDatabase實例,特別是在與IDbContext實例混合時。謝謝。

回答

0

當有多個具有相似構造函數參數的情況時,與StructureMap相關的似乎無法確定默認構造函數。在這種情況下,它有

Database(string connectionStringName) 
Database(string connectionStringName, string Provider) 
.... 

看起來這是輕微更好的語法?

x.For<IDatabase>().Use(() => new Database("DefaultDb")); 
+0

我的IDbContext有一個構造函數與connectionStringName和一個構造函數與IDbConnection和工作正常。似乎IDatabase具有太多重載的構造函數。 – Whoever 2013-03-21 19:08:14