Единство, чтобы вернуть новый экземпляр службы

Я столкнулся с небольшой проблемой при использовании 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.

Другие вопросы по тегам