我正在審查我之前編寫(xiě)的代碼,我注意到我過(guò)去曾這樣做過(guò) 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 相關(guān),它也適用于我需要解析容器的所有類(lèi)。正如你所看到的,我在這里使用ConfigurationManager.ConnectionStrings["default"],而最好使用IConfiurationfromMicrosoft.Extensions.Configuration為此,我應(yīng)該解析IConfiguration在 SimpleInjector 的容器中注冊(cè)的項(xiàng)目。過(guò)去我用過(guò)包裝紙public static class ContainerWrapper{ public static Container Container { get; set; }}我將其指定為 ContainerWrapper.Container = container; container.Verify();但我認(rèn)為這是一個(gè)錯(cuò)誤的方法,最好的解決方案是什么?
1 回答

拉風(fēng)的咖菲貓
TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
我的建議如下:
保持你的配置對(duì)象范圍窄;不要?jiǎng)?chuàng)建包含大量屬性并被許多使用者使用的寬配置對(duì)象。
防止配置對(duì)象從配置系統(tǒng)中讀取。相反,使它們成為不可變的無(wú)行為數(shù)據(jù)對(duì)象,并在其構(gòu)造函數(shù)中為它們提供配置值。這可以防止配置對(duì)象成為易失性依賴(lài)項(xiàng)。
刪除配置對(duì)象上的接口。接口旨在隱藏行為,但配置對(duì)象應(yīng)該只包含數(shù)據(jù)。
在應(yīng)用程序啟動(dòng)期間加載配置值,并將這些配置對(duì)象注冊(cè)到
Singleton
容器中。
- 1 回答
- 0 關(guān)注
- 106 瀏覽
添加回答
舉報(bào)
0/150
提交
取消