Предположим, у меня есть утилита (например, журнал), которая может использоваться каждым классом в моем приложении. Я хочу, чтобы регистратор мог сохранять информацию о типе клиента, который использует регистратор, то есть если StockProvider
хочет зарегистрировать сообщение, регистратор должен добавить имя класса StockProvider
вместе с сообщением журнала. И StockProvider
имеет регистратор передается через конструктор какПередайте информацию о клиенте к зависимости
public StockProvider (ILogger logger) {}
поэтому он может использовать регистратор в своих методах. Я знаю, что проще всего передавать информацию о типе каждый раз, когда используется регистратор, например logger.Log (GetType(), msg)
. Я хочу, чтобы регистратор имел информацию о типе клиента в своем состоянии вместо того, чтобы передавать информацию этого типа методам регистрации, чтобы вызовы Log
приводили к приложению, добавляющему имя типа. Например. передавая его с конструктором как
class Logger : ILogger {
public Logger (Type clientType) {
this.type = clientType;
}
public void Log(string msg)
{ Console.WriteLine(this.type.FullName + msg); }
}
будет работать, как и тогда внутри StockProvider
я мог бы просто сказать
logger.Log (msg)
Так что вопрос: я в состоянии зарегистрировать Logger
в таком общем виде, что он получает clientType
клиента, который запрашивает регистратор, является ли он StockProvider
или любым другим типом клиента? Обратите внимание, что я использовал регистратор как пример некоторого класса, который может быть широко использован в коде. Она также может быть своего рода издатель событий, хотел бы знать, кто инициирует событие
Прохладный. На самом деле я думал о таком подходе, но задавался вопросом, могу ли я уйти без параметра типа. И в этом весь вопрос. В любом случае спасибо за предложение - аккуратное решение! – patryk