Указание экземпляра для регистрации компонента с помощью Castle Windsor

У меня есть, наверное, простой вопрос о Castle Windsor, который я не использовал очень долго. Я пытаюсь зарегистрировать службу с конкретным экземпляром, который будет синглтонной реализацией службы.

Контейнер не может попытаться создать реализацию самой службы, потому что у нее есть зависимости, которые контейнер не сможет решить. У меня есть экземпляр службы, и я хочу, чтобы это был единственный экземпляр, используемый для всех, кто запрашивал эту услугу. Но мне кажется, что мне очень мало удачи.

На мгновение я надеялся получить этот код:

container.Register(Component.For<IMyInterface>().Instance(serviceObj));

Но все Замок делает с экземпляром, делает на нем .GetType() и регистрирует тип. Запросы для службы впоследствии заставят контейнер попытаться создать этот тип и сбой, если он не сможет заполнить зависимости.

Итак, есть ли способ сделать то, что я хочу здесь сделать? Если нет, я создам своего рода IServiceProvider, который забирает экземпляр службы и не будет иметь никаких зависимостей для заполнения контейнера. Но это похоже на большую работу, чем правильное решение.

Любые предложения? Спасибо!

Ответы

Ответ 1

Попробуйте использовать метод AddComponentInstance для объекта ядра контейнера. Я думаю, что это то, что вам нужно.


Обратите внимание: Этот метод теперь устарел. Вместо этого используйте container.Register(Component.For<T>().Instance(myT)); (благодаря eouw0o83hf)

Ответ 2

Вы можете сделать это через свойство Kernel контейнера:

container.Kernel.AddComponentInstance<IMyInterface>(serviceObj);