У меня проблемы с разрешением объектов из моего контейнера вручную. Похоже, что Виндзор не находит подходящих компонентов, хотя регистрация компонентов проходит без проблем. Особенность моего случая заключается в том, что некоторые компоненты разрешаются нормально, а другие выдают исключение. Следует отметить, что внедрение зависимостей в конструктор работает, даже с зависимостями, которые я не мог разрешить вручную.
Выдается при запуске:
Castle.MicroKernel.ComponentNotFoundException
HResult = 0x80131500
Сообщение = Нет компонента для поддержки службы Finance.Events.EventConductor.LoginConductor.
Источник = Castle.Windsor
Трассировки стека:
at Castle.MicroKernel.DefaultKernel.Castle.MicroKernel.IKernelInternal.Resolve (Служба типов, аргументы IDictionary, политика IReleasePolicy, логическое значение ignoreParentContext).
at Castle.MicroKernel.DefaultKernel.Resolve (Служба типов, аргументы IDictionary)
в Castle.Windsor.WindsorContainer.ResolveT
в Finance.Framework.Bootstrapper.OnStartup (Отправитель объекта, StartupEventArgs e) в C: \ Users \ Пользователь \ source \ repos \ Project \ Project \ Framework \ Bootstrapper.cs: строка 39
в System.Windows.Application.OnStartup (StartupEventArgs e)
в System.Windows.Application. <. ctor> b__1_0 (объект не используется)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall (обратный вызов делегата, аргументы объекта, Int32 numArgs)
в System.Windows.Threading.ExceptionWrapper.TryCatchWhen (Источник объекта, Обратный вызов делегата, Аргументы объекта, Int32 numArgs, Делегат catchHandler)
Код:
protected override void Configure()
{
_windowManager = new WindowManager();
_container = new WindsorContainer();
_container.AddFacility<TypedFactoryFacility>();
_container.Install(new ShellInstaller(),
new FrameworkInstaller(),
new ViewModelInstaller(),
new ModelInstaller(),
new FactoryInstaller(),
new RepositoryInstaller(),
new NHibernateInstaller());
}
Каждый установщик регистрирует компоненты один за другим, как это:
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Component.For<IEventAggregator>().ImplementedBy<EventAggregator>().LifestyleSingleton());
container.Register(Component.For<ILoginConductor>().ImplementedBy<LoginConductor>().LifestyleTransient());
container.Register(Component.For<IWindowManager>().ImplementedBy<WindowManager>().LifestyleSingleton());
container.Register(Component.For<ILoginService>().ImplementedBy<MockLoginService>().LifestyleSingleton());
}
Я пытаюсь разрешить свой объект следующим образом. Обратите внимание, что передача LoginViewModel
в WindowManager работает, пока строка перед выбрасывает исключение.
protected override void OnStartup(object sender, StartupEventArgs e)
{
_loginConductor = _container.Resolve<LoginConductor>(); // this throws the exception.
_windowManager.ShowWindow(_container.Resolve<LoginViewModel>()); // this does not.
}
Любая помощь очень ценится.