Регистратор не должен быть определен на уровне пользовательского интерфейса. Это междисциплинарная задача, поэтому вы должны определить ее во внешней библиотеке и указать, что во всех проектах вам нужно вести журнал.
Если вы хотите регистрировать только исключения, вы можете определить глобальный обработчик исключений, пусть исключения всплывают на уровень пользовательского интерфейса и регистрируют их там. Пример здесь
В случае, если вы действительно хотите полностью передать Logger вниз, вы можете использовать Action
в качестве параметра в методах и передать лямбду с вызовом метода, который вы хотите вызвать ниже по потоку.
public class Logger
{
public string Message { get; set; }
public void Log(string message)
{
Message = message;
}
}
public class Business
{
public void DoWork(int id, Action<string> logAction)
{
if (id < 0)
{
logAction("The string is less than zero");
}
}
}
Телефонный код
Logger logger = new Logger();
Business business = new Business();
business.DoWork(-1, (message) => logger.Log(message));