Единство, чтобы вернуть новый экземпляр службы
Я столкнулся с небольшой проблемой при использовании Unity и WPF. Сценарий таков: у меня есть приложение WPF, которое следует шаблону проектирования MVVM. Есть модуль под названием ViewKDI. В этом модуле у меня есть служба под названием ViewKDIService, служба ViewKDIService использует другую службу под названием UserService.
Каждый раз, когда я загружаю модуль ViewKDI, я хочу, чтобы Unity возвращала мне новый экземпляр ViewKDIService и UserService.
Я поместил ниже в загрузчик оболочки:
Container.RegisterType<IUserService, UserService>();
В модуль ViewKDI я положил следующее:
Container.RegisterType<IViewKDIService, ViewKDIService>();
Каждый раз, когда модуль ViewKDI загружается, вызывается конструктор ViewKDIService. Однако конструктор UserService вызывается только в первый раз, это означает, что я не получаю новый экземпляр UserService.
Мне нужно единство, чтобы дать мне новый экземпляр UserService, чтобы я мог управлять этим сеансом отдельно от остальной части приложения.
Есть идеи?
Спасибо Фейсал
1 ответ
Поведение Unity по умолчанию заключается в создании нового экземпляра каждого объекта каждый раз, когда его запрашивают, поэтому вы не должны видеть это поведение.
Из того, что я могу почерпнуть из исходного кода и документации MSDN ( это хорошее чтение), вы можете указать объект "менеджер времени жизни" при регистрации типа, чтобы сообщить Unity, как тип должен создаваться и кэшироваться. Использование TransientLifetimeManager (который по сути не кэширует) заставит Unity каждый раз заново создавать класс. Так что попробуйте это:
Container.RegisterType<IUserService, UserService>(new TransientLifetimeManager());
... и посмотреть, создает ли он каждый раз новый UserService.