2010-07-19 50 views
1

我希望能夠使用StructureMap將命名的依賴關係注入到類中,如果這是可能的話。我現在需要的主要原因是連接字符串注入。是否可以使用StructureMap命名依賴項?

我可以這樣做了錯誤的方式,但在這裏是如何我知道了(只是現在需要補充注射):

僞:

public class MyServiceClass 
    string connectionString; 

    public MyServiceClass(string connectionString) 
      this.connectionString = connectionString; 

    public void DeleteObject 
      var db = new EntitiesObject(connectionString) 

有沒有辦法把一個連接字符串構造函數參數的名稱,以便StructureMap知道如何注入它?

編輯:我可以有多個連接字符串在運行時從配置數據庫中確定。

編輯:一個解決方案,我認爲是...這樣,這可能注入的連接字符串基於類型

回答

1

你可以這樣做(假設創建ThisDatabaseConnectionString和ThatDatabaseConnectionString類myConnectionString是一個字符串實例):

container.Configure(r => r 
    .ForConcreteType<MyServiceClass>() 
    .Configure.Ctor<string>().Is(myConnectionString)); 

如果您還需要從一個接口(或抽象基類)映射MyServiceClass,你可以這樣做,而不是:

container.Configure(r => r 
    .For<IServiceClass>() 
    .Use<MyServiceClass>() 
    .Ctor<string>().Is(myConnectionString)); 

如果您以前配置容器配置命名的連接字符串,你可以這樣做:

container.Configure(r => r 
    .For<string>() 
    .Use("foo") 
    .Named("connStr1")); 
container.Configure(r => r 
    .For<string>() 
    .Use("bar") 
    .Named("connStr2")); 
container.Configure(r => r 
    .ForConcreteType<MyServiceClass>() 
    .Configure.Ctor<string>().Is((IContext ctx) => 
     ctx.GetInstance<string>("connStr2"))); 
+0

可能需要兩個不同的連接字符串(不太可能,但它發生).. 。我想我可能會按照我的想法爲每個需要的連接字符串創建一個類。 – 2010-07-19 20:32:29

+0

難道你不能只是選擇適當的連接字符串作爲你的容器設置的一部分? – 2010-07-19 21:18:01

+0

順便說一句,看看我更新的答案是否可以幫助你... – 2010-07-19 21:28:53

相關問題