Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Castle.MicroKernel.ComponentNotFoundException-使用Resolve解析组件时<;T>;_C#_Castle Windsor - Fatal编程技术网

C# Castle.MicroKernel.ComponentNotFoundException-使用Resolve解析组件时<;T>;

C# Castle.MicroKernel.ComponentNotFoundException-使用Resolve解析组件时<;T>;,c#,castle-windsor,C#,Castle Windsor,我无法从容器中手动解析对象。温莎似乎没有找到合适的部件,即使部件的注册没有问题。具体到我的情况是,一些组件解析得很好,而另一些组件抛出异常。值得注意的是,构造函数依赖项注入是有效的,即使使用我无法手动解析的依赖项 运行时会抛出此错误: Castle.MicroKernel.ComponentNotFoundException HResult=0x80131500 Message=未找到支持服务Finance.Events.EventConductor.LoginConductor的组件 来源=C

我无法从容器中手动解析对象。温莎似乎没有找到合适的部件,即使部件的注册没有问题。具体到我的情况是,一些组件解析得很好,而另一些组件抛出异常。值得注意的是,构造函数依赖项注入是有效的,即使使用我无法手动解析的依赖项

运行时会抛出此错误:

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)

守则:

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
。如何(以及何时)解决。感谢您的反馈,我相应地更新了我的问题。