2017-08-14 40 views
0

我已經創建了一個dll,它有一些功能,可以在項目之間共享。不過,我可能需要從引用它的項目中調整dll的設置。在另一個完全不同的解決方案中公開配置設置以供其他項目使用的最佳方式是什麼?創建可以通過使用應用程序進行配置的實用程序dll的最佳方法是什麼?

方面,我曾嘗試:

的appSettings導入

的applicationSettings導入

當前設置,消費解決方案設定值被忽略/不設置,爲什麼呢?

DLL設置

public class ApplicationSettingsRetriever : IApplicationSettingsRetriever 
{ 
    public string LogEnvironmentSetting => ConfigurationManager.AppSettings.Get("LogEnvironment"); 
} 

消費者解決方案的app.config

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    <appSettings> 
    <add key="LogEnvironment" value="local"/> 
    </appSettings> 
</configuration> 
+0

如果您想獲得最大的靈活性,您應該接受具有屬於您的「配置」屬性的注入接口。然後,客戶端可以實現他們想要的 - 數據庫,配置文件,無論如何。 – Crowcoder

+0

爲客戶端和dll使用案例添加了設置 – user1732364

回答

2

你不需要輸入任何東西。在.NET中,DLL從父應用程序獲取其配置設置,而不是從它自己的配置中獲取。因此,舉例來說,如果你需要的DLL來讀取從父應用程序的配置連接字符串,你可以簡單地使用

return ConfigurationManager.AppSettings["ConnectionString"]; 

這將在包含Windows應用程序在app.config自定義配置部分閱讀,或者web.config如果它是一個Web應用程序。

+0

如果你想組織它,你應該創建一個自定義配置部分,因此你的庫/實用工具DLL的所有配置都將在配置的一部分中,而不會與其他配置混淆CONFIGS。更多信息請訪問:https://msdn.microsoft.com/en-us/library/2tw134k3(v=vs.100).aspx – Alexrgs

+0

我已添加代碼以提供對我的設置的可見性。我錯過了什麼? – user1732364

0

你可以做的一件事就是製作類似MyLibraryConfiguration類的東西。

當您在庫中創建對象的實例(或者在可以設置靜態值的靜態函數中)時,您可以通過這個Configuration來設置可更改的值。

相關問題