亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 .NET 應用程序中注入配置對象

在 .NET 應用程序中注入配置對象

C#
藍山帝景 2023-09-09 14:57:50
我正在審查我之前編寫的代碼,我注意到我過去曾這樣做過  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容器中。


查看完整回答
反對 回復 2023-09-09
  • 1 回答
  • 0 關注
  • 110 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號