現在IoCのコンセプト(WPFアプリ)を使用していますが、私はまだ把握しようとしているので、私はそれを使用するツールをまだ決めていません私は、各コンポーネントの特定のパラメータに関してこれがどのように構成されるのか混乱しています。パラメータ付きIoCロガー
私は、設定ファイルに関連するライブラリをどのように定義するのか、どのライブラリをどのように使用するのか、およびそのライフスパンを決定する方法を理解しています。
どこから渡しますか?
たとえば、一般的なロガーを使用します。
Iは、次のインターフェイスがあります。私は、自分のパラメータを必要とする複数ロガーそれぞれを定義
public class Logger : ILogger
{
private readonly ILogger _logger;
public Logger (ILogger logger)
{
_logger = logger;
}
public void Write(string message)
{
_logger.Write(message);
}
}
、私は次のように実装:私はロガークラス自体を有する
public interface ILogger
{
void Write(string message);
}
を
a)データベースロガー:ここで私のメッセージをデータベースに記録できるように接続文字列が必要ですe。
public void LoggerDb: ILogger
{
public void Write(string message)
{
}
public ConnectionString {get; set;}
}
b)は、ファイルロガー:私は、関連するログファイルに私のメッセージをログに記録できるように、ファイル名が必要です。
public void LoggerFile: ILogger
{
public void Write(string message)
{
}
public Filename {get; set;}
}
c)は、コンソールロガー:私はちょうど出力にコンソールウィンドウへの私のメッセージをしたいと何のパラメータが必要とされない。私のコンソールのテストアプリで
public void LoggerConsole: ILogger
{
public void Write(string message)
{
}
}
、私はProgram.csの中で、次のコードを持っている:Main
方法で上記のコードについて、私と一緒に裸
static void Main(string[] args)
{
string logTypeId = "d";
ILogger logType;
if (logTypeId == "d")
{
logType = new LoggerDb("Data Source=....");
}
else if (logTypeId == "f"
{
logType = new LoggerFile("c:\\mylog.txt");
}
else
{
logType = new LoggerConsole();
}
Logger logger = new Logger(logType);
logger.Write("Message 1");
logger.Write("Message 2");
logger.Write("Message 3");
}
してください。私はIoCツールを使用した場合のコードの仕方ではないことを理解しています。私はちょうど私が達成しようとしているものを強調するためにしようとしていると私は、次の質問への答えを取得しようとしている:
が、これはIoCのツールを使用して達成することができるつまりロガーに応じて特定のパラメータを渡しますapp.configのIoCセクションで使用/定義されているタイプですか?
正しいアプローチですか?具体的なロガーには独自のコンストラクタパラメータがありますか?そうでない場合は、理由を説明し、正しい方法を教えてください。私はあなたが使用するIoCツールを気にしません。私はこれがどのように行われるべきか理解したい。
これらの追加パラメータは、どこでapp.configに保存する必要がありますか?
ありがとう。
"これはIoCツールを使用した場合のコードの仕組みではありません。"これは間違っています。 DIライブラリを使用していても、あなたがやっていることは有効なアプローチです。あなたの 'Main'メソッドは[Composition Root](http://blog.ploeh.dk/2011/07/28/CompositionRoot/)であり、DIライブラリを設定する場所です。 DIライブラリを使用する場合、コードはまったく同じに見えるかもしれません。 – Steven