Интересно, если это что-то очень простое, что я просто упускаю, или есть еще много чего.
По сути, я пытаюсь использовать инъекцию сеттера StructureMap для логгера.реализация.Конструктор для регистратора, который я хочу использовать для StructureMap, принимает параметр Type
для создания регистратора:
public class Logger : ILogger
{
private ILog _log = null;
public Logger() { _log = LogManager.GetCurrentClassLogger(); }
public Logger(string name) { _log = LogManager.GetLogger(name); }
public Logger(Type loggerType) { _log = LogManager.GetLogger(loggerType); }
// The rest of the implementation...
}
В своем коде начальной загрузки я инициализирую его следующим образом:
ObjectFactory.Configure(x => {
x.FillAllPropertiesOfType<ILogger>().Use(l =>
new Logger(l.BuildStack.Current.ConcreteType));
// Further unrelated bootstrapping...
});
Это не совсем работает на 100%, и это, вероятно, просто отсутствие полного понимания с моей стороны.Итак, у меня есть несколько вопросов относительно поведения, которое я вижу:
- «Тип», который видит регистратор, когда я прохожу через отладчик и углубляюсь в реализацию log4net, имеет значение
ILogger
.Как я могу получить его того типа, который содержит вводимый установщик? - Устанавливаются только сеттеры на экземплярах, созданных StructureMap.Например, на интерфейсах / реализациях репозитория для уровня доступа к данным.Другие объекты, такие как мои бизнес-модели, не построены из графа StructureMap и просто создаются как обычно.Есть ли способ сказать, что StructureMap также вводит в них?Я полагаю, что нет, потому что как бы это знать?Итак, как я могу разрешить экземпляр правильно построенного регистратора для типа?(Я знаю, как вызвать распознаватель, что я делаю через локатор службы, но не знаю, как вызывать его для этой конкретной необходимости.)
- Мне приходит в голову, что это «просто не правильно».Может я что-то упускаю из именованных экземпляров?Потому что, если загрузчику удастся отобразить реализацию этого, как / когда тогда он будет предоставлять разные экземпляры для каждого класса, который имеет установщик?
Может быть, есть совершенно другой / более простой / лучший способ выполнитьчто я пытаюсь сделать, и я приветствую предложения для этого.По сути, я абстрагирую свою реализацию журналирования за контейнером IoC, и мне нужны специфичные для класса регистраторы.