Unity RegisterInstance объектов IDisposable

Unity 2.0:

По умолчанию RegisterInstance использует ContainerControlledLifetimeManager. Когда контейнер Unity удаляется, он вызывает Dispose для экземпляра (если IDisposable).

В моем случае это не то, что мне нужно. Экземпляр принадлежит другому классу и управляется им; Unity следует просто ввести ссылку. Итак, я использовал:

container.RegisterInstance(instance, new ExternallyControlledLifetimeManager());

В документации Unity (в разделе «Общие сведения о менеджерах времени жизни») указано:

Использование метода RegisterInstance для зарегистрировать существующий объект приводит к такое же поведение, как если бы вы просто зарегистрировал жизненный контейнер с RegisterType. Следовательно, это рекомендуется не использовать RegisterInstance для регистрации существующий объект при использовании нестандартные менеджеры срока службы, кроме для потока, в котором Был вызван RegisterInstance.

Что это означает?

В том же разделе также говорится:

Если вы зарегистрировали существующий экземпляр объекта с помощью RegisterInstance, контейнер возвращает один и тот же экземпляр для всех вызывает Resolve или ResolveAll или когда механизм зависимости вводит экземпляры в другие классы при условии верно одно из следующих утверждений:

  • Вы указали диспетчер времени жизни, управляемый контейнером.
  • Вы использовали диспетчер времени жизни по умолчанию.
  • Вы выполняете разрешение в том же контексте, в котором зарегистрировали пример при использовании другого диспетчер времени жизни.

Я попытался выполнить разрешение в другом потоке после использования RegisterInstance с ExternalControlledLifetimeManager, и это сработало - я получил экземпляр синглтона.

Мой код соответствует примеру в разделе «Создание экземпляров регистрации». Однако я хочу убедиться, что понимаю контекстные оговорки.

Для ясности, я всегда хочу, чтобы контейнер Unity вставлял экземпляр, который я зарегистрировал, независимо от потока и т. Д., И я не хочу Unity избавиться от него. Правильно ли я делаю это?

9
задан shenku 19 February 2014 в 21:55
поделиться