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