考虑这种情况。我有一些业务逻辑,不时需要写入日志。
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 界面?我看到了两种主要的可能性;
- 在构造函数上使用依赖注入传递它。
- 通过单例服务定位器获取它。
您更喜欢哪种方法,为什么?还是有更好的模式?
更新: 请注意,我不需要记录所有方法调用。我只想记录一些在我的方法中可能发生也可能不会发生的(罕见)事件。