2009-07-18 74 views
0

我正在嘗試使用結構圖。我使用的是2.5.3版本。StructureMap WithCtorArg - 缺少引用?

我已經構建了一個簡單的啓動strapper,但我無法得到它編譯。我得到的錯誤:

「StructureMap.Configuration.DSL.Expressions.CreatePluginFamilyExpression」不包含「WithCtorArg」的定義,並沒有擴展方法「WithCtorArg」接受一個類型的第一個參數「StructureMap.Configuration.DSL.Expressions .CreatePluginFamilyExpression'可以找到(你是否缺少使用指令或程序集引用?)

我錯過了什麼?

我試圖編譯代碼是在這裏:

using DomainModel.Abstract; 
using DomainModel.Concrete; 
using StructureMap; 
using StructureMap.Pipeline; //The only WithCtorArg methods I can find are in this namespace, it didn't help. 

namespace WebUI 
{ 
public class ContainerBootstrapper 
{ 
    public static void BootstrapStructureMap() 
    { 
     // Initialize the static ObjectFactory container 
     ObjectFactory.Initialize(x => 
     { 
      x.ForRequestedType<IProductsRepository>() 
       .TheDefaultIsConcreteType<SqlProductsRepository>() 
       .WithCtorArg("connectionString") 
       .EqualToAppSetting("SqlConnection"); 
     }); 
    } 
} 
} 

回答

1

如果你的類有簡單類型參數,像字符串,整數等非默認構造函數...你可以試試這個:

x.ForRequestedType<IProductsRepository>() 
.TheDefault 
.Is 
.OfConcreteType<SqlProductsRepository>() 
.WithCtorArg("connectionString") 
.EqualToAppSetting("SqlConnection"); 
0

我遇到了類似的問題。

如果您使用ForRequestedType的通用版本,你需要做的是達林建議,並使用TheDefault.Is.OfConcreteType語法

如果您使用ForRequestedType的非通用版本,你可以做到這一點,像這樣:

x.ForRequestedType(typeof (ProductsRepository)) 
.TheDefaultIsConcreteType(typeof(SqlProductsRepository)) 
.WithCtorArg("connectionString") 
.EqualToAppSetting("SqlConnection");