Рассмотрим этот сценарий. У меня есть некоторая бизнес-логика, которую время от времени потребуется писать в журнал.
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? Я вижу две основные возможности:
- Передайте его, используя Injection Dependency в конструкторе.
- Получите его через одноранговый сервисный локатор.
Какой метод вы бы предпочли, и почему? Или есть еще лучший образец?
Update: Обратите внимание, что мне не нужно регистрировать ВСЕ вызовы методов. Я хочу только регистрировать несколько (редких) событий, которые могут возникнуть или не произойти в моем методе.