Решение зависимостей с использованием единицы для одноэлементного класса - PullRequest
0 голосов
/ 19 октября 2018

У меня есть интерфейс ILogger, а класс Logger (который является синглтоном) реализует интерфейс ILogger.Я хотел зарегистрировать эту зависимость, используя контейнер Unity.Не могли бы вы помочь мне.

public class Logger: ILogger
{
 private static readonly Lazy<Logger> instance = new Lazy<Logger>(()=> new Logger());
 public static Logger Instance{get{return instance.Value;}}
 private Logger(){}
 public void LogEvent(){}
}

1 Ответ

0 голосов
/ 19 октября 2018

Сначала я вижу, что ваш код не компилируется.Ваш пропущенный тип экземпляра:

...
public static ILogger Instance {get{return instance.Value;}}
...

Насколько я понимаю, вы намерены попробовать следующее в вашем классе запуска:

var container = new UnityContainer();
var logger = Logger.Instance; 
container.RegisterInstance<ILogger>(logger, new ContainerControlledLifetimeManager());

container.Resolve<ILogger> возвращает ваш экземпляр и вводит ILogger вконструктор, и вы должны получить свой экземпляр регистратора ContainerControlledLifetimeManager, разрешающий одноэлементный экземпляр зарегистрированного типа в области времени жизни контейнера.

Не забудьте настроить UnityContainer в качестве средства разрешения зависимостей по умолчанию в вашем проекте.

...