要回答您的問題,您可以在StructureMap中找到您的蛋糕並將其吃掉。您可以使用代碼配置您的容器,並從應用程序配置中獲取所需的額外配置。這就是EqualToAppSetting的用途。
創建一個設置類
public class DatabaseSettings
{
public DatabaseSettings(string type, string connectionString)
{
Type = type;
ConnectionString = connectionString;
}
public string Type { get; set; }
public string ConnectionString { get; set; }
}
下一頁告訴StructureMap使用你的應用程序設置進行配置。
[Test]
public void setup_concrete_class_via_application_configuration()
{
var container = new Container(config =>
{
config.ForConcreteType<DatabaseSettings>().Configure
.Ctor<string>("type").EqualToAppSetting("dovetail.database.type", "mssql")
.Ctor<string>("connectionString").EqualToAppSetting("dovetail.database.connectionString");
});
var databaseSettings = container.GetInstance<DatabaseSettings>();
databaseSettings.Type.ShouldEqual("mssql");
databaseSettings.ConnectionString.ShouldEqual("Data Source=.; Initial Catalog=dovetail;User Id=sa;Password=sa;");
}
最後這裏是應用程序設置看起來像我的應用程序配置什麼:
<appSettings>
<add key="dovetail.database.type" value="mssql"/>
<add key="dovetail.database.connectionString" value="Data Source=.;Initial Catalog=dovetail;User Id=sa;Password=sa;"/>
</appSettings>
嗯......這聽起來是合理的。謝謝!! –
雖然我同意你的答案。看來這個問題真的被問到如何讓我的應用程序配置進入我的類型。 – KevM
@KevM,不是真的。我的問題是關於哪個配置選項更好。它出現了,因爲我無法使用xml將我的連接字符串輸入到我的類型中。我將不得不在connectionmap.config文件中再次寫入連接字符串。我本來想避免在兩個地方維護連接字符串。 –