2011-11-15 57 views
2

我對結構圖仍然很陌生,所以我不明白爲什麼這不起作用。我注入「連接字符串」到資源庫,我不斷收到從結構地圖以下錯誤:注入結構圖不起作用的連接字符串

StructureMap異常代碼:205 缺少請求實例屬性「purchaseOrdersFilePath」爲InstanceKey「a04b4f71-4171-4e9f- b98d-170fc9ee005f」

在一個側面說明,在連接字符串中引號是因爲我使用LINQ玩到XML作爲也因此,‘連接字符串’實際上是一個文件的路徑。我加了這個以防萬一它可能與這個問題有關。

我的代碼如下:

public class PurchaseOrderRepository : IPurchaseOrderRepository 
{ 
    private readonly string PurchaseOrdersFilePath; 

    public PurchaseOrderRepository(string purchaseOrdersFilePath) 
    { 
     if (string.IsNullOrWhiteSpace(purchaseOrdersFilePath)) throw new ArgumentNullException("purchaseOrdersFilePath"); 

     PurchaseOrdersFilePath = purchaseOrdersFilePath; 
    } 
} 

在我的Global.asax文件我有以下配置語句:

private void RegisterControllerFactory() 
{ 
    var ioc = new Container(); 

    var controllerFactory = new IocControllerFactory(ioc); 
    ControllerBuilder.Current.SetControllerFactory(controllerFactory); 

    ioc.Configure(r => r.Scan(x => 
    { 
     x.AssemblyContainingType<HomeController>(); 
     x.AddAllTypesOf<IController>(); 
     x.Include(t => typeof(IController).IsAssignableFrom(t)); 
    })); 

    ioc.Configure(r => r 
     .ForConcreteType<PurchaseOrderRepository>() 
     .Configure.Ctor<string>().Is(@"C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml")); 
} 

我在做什麼錯?

感謝您的幫助。

回答

6

事實證明,我曾兩次配置相同的成分(我沒有在這個問題的示例代碼中體現),所以我所做的一切是這樣的:

ioc.Configure(r => r 
       .For<IPurchaseOrderRepository>() 
       .Use<PurchaseOrderRepository>()); 

    ioc.Configure(r => r 
      .ForConcreteType<PurchaseOrderRepository>() 
      .Configure.Ctor<string>().Is(@"C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml")); 

當是我應該做的事情是這樣的:

ioc.Configure(r => r 
       .For<IPurchaseOrderRepository>() 
       .Use<PurchaseOrderRepository>() 
       .Ctor<string>().Is(@"C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml")); 
2

嘗試:

.Ctor<string>("purchaseOrdersFilePath").Is(@"C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml")); 
+0

謝謝,但沒有奏效。我仍然得到了完全相同的錯誤。 –