Прежде всего, это немного спорно, если ABCHelper ваш текущий класс, так как он еще не построен;)
1002 * Я думаю, что Unity использует некоторые приемы для эффективного построения зависимостей. Описание
DynamicBuildPlanGenerationContext
Этот объект отслеживает текущее состояние генерации плана сборки, накапливает промежуточный язык Microsoft, предоставляет преамбулу и постамбулу для динамического c метод и отслеживает такие вещи, как локальные переменные в сгенерированном MSIL, чтобы их можно было повторно использовать в стратегиях генерации MSIL.
NLog пытается найти имя текущего класса, проверяя стек вызовов, но не может найти его, вероятно, из-за оптимизации.
Я думаю, что самое простое решение - использовать именованные регистраторы , например, используя LogManager.GetLogger(string)
public class ABCHelper : ABCBase, IABCHelper
{
public ABCHelper()
: base(LogManager.GetLogger(nameof(ABCHelper)))
{
}
}
Боковое примечание, возможно, это из-за демонстрации, но я не вижу здесь правильно введенного регистратора. Если вы не хотите использовать DI для регистраторов, вы можете просто создать поле stati c?
Если вам нравится использовать внедренные логгеры, я бы рекомендовал проверить Microsoft.Extensions.Logging с NLog.Extensions.Logging , который также работает с Unity и . NET Каркас. Это также может быть полезно: Разрешить generi c Microsoft.Extensions.Logging.ILogger с Unity - получить InvalidCastException
Или вы можете использовать