2017-09-05 54 views
0

由於ConfigurationManager在.NET標準不存在,什麼是爲執行大會檢索應用程序設置的最佳方式,無論是web.configappSettings.{env}.json,一個標準的.NET類庫中?如何在.NET Framework,.NET Standard和.NET Core項目之間使用相同的配置?

我們有三個項目:

  • 核心ASP.NET Web應用程序(1.1)
  • ASP.NET Web應用程序(4.6.1)
  • .NET標準類庫(1.4) - >由兩個項目引用

在.NET標準類lib中,我們有一個URL,需要根據部署到的環境進行更改。

這對.NET Core應用程序來說很好,我們只需將URL添加到合適的appSettings.{env}.json文件中,將適當的值添加到DI容器,然後使用Microsoft.Extensions.Options庫來檢索配置。但我們也需要從我們的.NET Framework 4.6.1應用程序中調用庫,但由於沒有方法(至少沒有找到)從web.config文件中檢索值,所以我們不用「沒有一個很好的方式來設置類庫中的URL。

我們現在通過將URL變量設置爲static,並從我們引用的每個.NET Framework項目的Application_Start()方法中設置其值,我們通過我們添加的appSetting密鑰來確定它是哪個環境到每個web.config,然後根據環境手動設置URL。

有一個更強大的.NET標準類庫中處理來自一個.NET的核心和.NET Framework應用程序檢索的appSettings值呢? 最好在那裏我們可以只在類庫中設置值。

+0

感謝您對一個完全合法的問題進行隨機倒票? –

回答

2

你應該呼喚你的庫之前讀取配置值,由參數,它傳遞到任何方法或構造函數。

一般情況下,庫中的代碼不應該依賴於從主機環境的配置副作用。這樣做會導致重用代碼或進行有效測試變得非常困難。

+0

這已經是我們如何做它 - 在'Global.asax.cs',我們稱之爲'SetClientUrl(字符串clientApiUrl)的基礎上在每個使用.NET框架項目的配置'方法。我希望有一種更具可擴展性的方式。我們的庫是基於Swagger API生成的,並且需要一個不同的IP地址,具體取決於它部署到的服務器,所以我們沒有選擇。如果所有項目都是.NET Core或所有項目都是.NET Framework,那麼這將是完全可能的,所以我認爲有一些方法可以在.NET標準中實現。 –

+1

聽起來好像你做的是正確的事情,但我會考慮是否有強制使用的方法。例如,通過構造函數參數。很難說沒有細節。 (是不是我downvote順便說一句,我認爲這是一個很好的問題。) –

+0

我認爲這不是你;通常情況下,那些贊成反對的人也不會花時間回答這個問題:)好吧 - 那麼似乎目前不可能從web.config和appSettings中獲取appSettings。 json'在一個.NET標準項目中。感謝您的答覆。 –

相關問題