2013-07-01 47 views
1

我有一個包含一些基本邏輯的類庫項目。C#根據消費者更改DLL app.config

該項目創建的DLL將用於其他一些項目。

我有一個類庫項目中的一個app.config文件與DLL使用的幾個值。

當每個消費者的項目將使用DLL,它有可能改變在App.config

例如值,如果我的DLL的app.config中含有3個設置:A,B,C,則:
該DLL的第一個消費者將具有A =「a」,B =「aa」,C =「aaa」。
該DLL的第二個消費者將有A =「t」,B =「tt」,C =「ttt」。
等等......

從設計的角度來看,什麼是實現這種情況的最乾淨的方法?
(在我看來,app.config應該駐留在使用該DLL的項目中)

感謝您的關注! :)

編輯:

我的大多數DLL中的代碼耗時ASMX的Web服務,其中包括它的.config。每個將使用DLL的應用程序都有自己的WS地址(合同是相同的)。我該如何將應用程序的服務地址注入DLL中?

編輯#2:

現在我有2個配置文件:
1.在類庫項目 - 包含WCF客戶端配置。
2.在使用DLL的應用程序中 - 包含帶有DLL值的配置。

如何從應用程序的配置中將值注入到DLL的配置中(例如,端點的地址)?

+2

類庫沒有得到自己的配置文件。您可以添加一個(或某些工具可能會自動添加一個),但它在運行時未使用。尊重的唯一配置文件是主應用程序的配置文件。 –

+0

你不能在數據庫中保存這些設置嗎?並從消費應用程序中選擇正確的運行時設置? – RubbleFord

+0

@RubbleFord - 不幸的是,由於各種限制,數據庫不是一個選項。那麼這裏最好的做法是什麼? – Sash

回答

2

只有應用程序具有.config文件,因此在類庫中有一個.config文件是沒用的。 這意味着,值應該來自別處 我能想到的選項是:

  1. 使用應用程序的config文件 - 缺點:該人士認爲編寫應用程序需要知道你的配置值並添加它們。大多數時候,當他/她會得到缺失值的例外時,他/她會發現這些設置。
  2. 如果所有應用程序使用相同的DB,則將值保存到數據庫(或其他Web服務),這可能是個好主意。當您的應用程序數量非常有限時可以很好地工作。我將這個用於生產/測試環境的不同值
  3. 使每個需要這些值的類都可以將它們放入承包商中。 優勢:無需提示,應用程序編程人員將知道數據。這是一個乾淨的界面。如果它是客戶特定的項目,我會使用此選項。缺點:大量的應用程序工作程序
+0

感謝您的回答。如果我選擇第一個選項,我該如何從DLL的代碼中讀取應用程序的.config文件? – Sash

+0

請看最新的問題。 – Sash

+0

如果您的應用程序有很多實例(並且每個Web Service的代碼都存在一次),只需將您想要的值添加到配置文件並像下面這樣讀取:System.Configuration.ConfigurationManager.AppSettings [「SomeKey」] – asafrob