Указание экземпляра для регистрации компонента с помощью 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);