我正在審查我之前編寫的代碼,我注意到我過去曾這樣做過 public class Linq2DbSettings : ILinqToDBSettings{ public IEnumerable<IDataProviderSettings> DataProviders { get { yield break; } } public string DefaultConfiguration => "SqlServer"; // lets set your configuration as default, so you can call just new DataContext() or new DataConnection() public string DefaultDataProvider => ProviderName.SqlServer; // and set default database type public IEnumerable<IConnectionStringSettings> ConnectionStrings { get { yield return new ConnectionStringSettings { Name = "SqlServer", ProviderName = "SqlServer", ConnectionString =ConfigurationManager.ConnectionStrings["default"].ConnectionString }; } }}public class ConnectionStringSettings : IConnectionStringSettings{ public string ConnectionString { get; set; } public string Name { get; set; } public string ProviderName { get; set; } public bool IsGlobal => false;}即使它與 Linq2Db 相關,它也適用于我需要解析容器的所有類。正如你所看到的,我在這里使用ConfigurationManager.ConnectionStrings["default"],而最好使用IConfiurationfromMicrosoft.Extensions.Configuration為此,我應該解析IConfiguration在 SimpleInjector 的容器中注冊的項目。過去我用過包裝紙public static class ContainerWrapper{ public static Container Container { get; set; }}我將其指定為 ContainerWrapper.Container = container; container.Verify();但我認為這是一個錯誤的方法,最好的解決方案是什么?
1 回答

拉風的咖菲貓
TA貢獻1995條經驗 獲得超2個贊
我的建議如下:
保持你的配置對象范圍窄;不要創建包含大量屬性并被許多使用者使用的寬配置對象。
防止配置對象從配置系統中讀取。相反,使它們成為不可變的無行為數據對象,并在其構造函數中為它們提供配置值。這可以防止配置對象成為易失性依賴項。
刪除配置對象上的接口。接口旨在隱藏行為,但配置對象應該只包含數據。
在應用程序啟動期間加載配置值,并將這些配置對象注冊到
Singleton
容器中。
- 1 回答
- 0 關注
- 110 瀏覽
添加回答
舉報
0/150
提交
取消