C# Castle.MicroKernel.ComponentNotFoundException-使用Resolve解析组件时<;T>;
我无法从容器中手动解析对象。温莎似乎没有找到合适的部件,即使部件的注册没有问题。具体到我的情况是,一些组件解析得很好,而另一些组件抛出异常。值得注意的是,构造函数依赖项注入是有效的,即使使用我无法手动解析的依赖项 运行时会抛出此错误: Castle.MicroKernel.ComponentNotFoundException HResult=0x80131500 Message=未找到支持服务Finance.Events.EventConductor.LoginConductor的组件 来源=Castle.Windsor 堆栈跟踪: 位于Castle.MicroKernel.DefaultKernel.Castle.MicroKernel.IKernelInternal.Resolve(类型服务、IDictionary参数、IReleasePolicy策略、布尔ignoreParentContext) 位于Castle.MicroKernel.DefaultKernel.Resolve(类型服务,IDictionary参数) 在Castle.Windsor.WindsorContainer.Resolve 在C:\Users\User\source\repos\Project\Project\Framework\Bootstrapper.cs中的Finance.Framework.Bootstrapper.OnStartup(对象发送方,StartupEventArgs e)中:第39行 在System.Windows.Application.OnStartup(StartupEventArgs e)上 在System.Windows.Application.b_uuu1_u0(对象未使用) 位于System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调、对象参数、Int32 numArgs) 位于System.Windows.Threading.ExceptionWrapper.TryCatchWhen(对象源、委托回调、对象参数、Int32 numArgs、委托catchHandler) 守则:C# Castle.MicroKernel.ComponentNotFoundException-使用Resolve解析组件时<;T>;,c#,castle-windsor,C#,Castle Windsor,我无法从容器中手动解析对象。温莎似乎没有找到合适的部件,即使部件的注册没有问题。具体到我的情况是,一些组件解析得很好,而另一些组件抛出异常。值得注意的是,构造函数依赖项注入是有效的,即使使用我无法手动解析的依赖项 运行时会抛出此错误: Castle.MicroKernel.ComponentNotFoundException HResult=0x80131500 Message=未找到支持服务Finance.Events.EventConductor.LoginConductor的组件 来源=C
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());
}
受保护的覆盖无效配置()
{
_windowManager=新的windowManager();
_容器=新WindsorContainer();
_container.AddFacility();
_container.Install(新的ShellInstaller(),
新建FrameworkInstaller(),
新建ViewModelInstaller(),
新建ModelInstaller(),
新FactoryInstaller(),
新建RepositoryInstaller(),
新的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());
}
public void安装(IWindsorContainer,IConfigurationStore)
{
container.Register(Component.For().ImplementedBy().LifestyleSingleton());
container.Register(Component.For().ImplementedBy().LifestyleTransient());
container.Register(Component.For().ImplementedBy().LifestyleSingleton());
container.Register(Component.For().ImplementedBy().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.
}
启动时受保护的覆盖无效(对象发送方、StartupEventArgs e)
{
_loginConductor=_container.Resolve();//这会引发异常。
_windowManager.ShowWindow(_container.Resolve());//这不是。
}
非常感谢您的帮助。您看到此错误是因为您正在尝试解析
LoginConductor
的服务,但未注册LoginConductor
的服务
您正在注册由LoginConductor
实现的服务ILoginConductor
的组件
如果上述内容听起来令人困惑,且斜体字不清晰
有了这些,解决方案将是将您解析的服务与您依赖的服务相一致。您是将
ILoginConductor
保留为服务还是将LoginConductor
设置为您的服务取决于您的特定上下文。两位信息将有助于回答这个问题:如何注册LoginConductor
。如何(以及何时)解决。感谢您的反馈,我相应地更新了我的问题。