このシナリオを考えてみましょう。ログに書き込む必要があるビジネス ロジックがいくつかあります。
interface ILogger
{
void Log(string stuff);
}
interface IDependency
{
string GetInfo();
}
class MyBusinessObject
{
private IDependency _dependency;
public MyBusinessObject(IDependency dependency)
{
_dependency = dependency;
}
public string DoSomething(string input)
{
// Process input
var info = _dependency.GetInfo();
var intermediateResult = PerformInterestingStuff(input, info);
if (intermediateResult== "SomethingWeNeedToLog")
{
// How do I get to the ILogger-interface?
}
var result = PerformSomethingElse(intermediateResult);
return result;
}
}
ILogger インターフェイスはどのように取得しますか? 主な可能性は 2 つあります。
- コンストラクターで依存性注入を使用して渡します。
- シングルトン Service Locator を介して取得します。
あなたはどちらの方法を好みますか、またその理由は何ですか? それとももっと良いパターンがありますか?
更新: すべてのメソッド呼び出しをログに記録する必要はないことに注意してください。メソッド内で発生する可能性がある、または発生しない可能性があるいくつかの (まれな) イベントのみをログに記録したいと考えています。