2016-09-07 16 views
0

ConfigProgram.csでインスタンス化されているので、他のクラスで使用することができます。私が理解しているように、依存性注入を使う必要がありますが、達成方法を確かめる必要はありません。アプリワイド静的変数C#コンソールアプリケーション


のProgram.cs

public class Program 
{ 
    static IConfigurationRoot Config = null; 

    public static void Main(string[] args) 
    { 
     Config = new ConfigurationBuilder() 
      .SetBasePath(Environment.CurrentDirectory) 
      .AddJsonFile("appsettings.json") 
      .AddEnvironmentVariables() 
      .Build(); 
    } 
} 

TestClass.cs

public class TestClass 
{ 
    public void DoSomething() 
    { 
     // Now I need to use that instantiated Config object here. 
    } 
} 
+1

実行可能アセンブリのメンバを別のクラスで参照することは珍しいことです。私はあなたがデザインを再考すべきだと思います。 – Crowcoder

+0

どうすればいいのですか?私のここでの要件は、アプリケーションのどこにいても、すべての設定エントリにアクセスできることです。 – TSR

+0

私は構成リポジトリを作成し、(データベースのような)任意のデータストアのような設定データを扱うのが好きです。だから、おそらくそれらのフィールドを保持するためのクラスを作成します。この変数は、 'Program.Config'によって公開されていれば使用できますが、SOLIDの原則ではProgramクラスを悪用することになります。 – Crowcoder

答えて

0
Config

は、それがProgram.Config

として他のクラスからアクセスできる、 public static宣言された場合
2

あなたは依存性の注入を使用したい場合は、あなたのTestClassコンストラクタは1 IConfigurationRootをお願いします、あなたはコンフィグstatic publicを作ることができるのいずれか、それはあなたのアプリケーション内の任意の場所にアクセスすることができ、あるいは:今

public TestClass(IConfigurationRoot config) 
{ 
    // do what you need 
    // save a reference to it on a local member, for example 
} 

たびに新しいTestClassをインスタンス化する場合は、そのコンストラクタに引数で渡すIConfigurationRootオブジェクトを渡す必要があります。それは面倒なことが判明した場合(例:あなたは、異なる多くの場所で、多くのことをTestClassインスタンス):あなたはASP.NETを使用しない場合、また

、あなたはTestClassFactoryを使用する場合がありますあなたが任意のデータベースモデルのために行うのと同じように、Crowcoderが指摘したように、configリポジトリを作成するかもしれません。そのリポジトリは、たとえばjsonファイルから設定を取得します。

このような何か:

public class ConfigurationRepository : IConfigurationRepository 
{ 
    public string GetBasePath() 
    { 
     // Read base path from config files 
    } 

    public string SetBasePath() 
    { 
     // Write base path to config files 
    } 
} 

そして、あなたはあなたのTestClassIConfigurationRepositoryを渡すためにDIを使用します。