我无法从容器中手动解析对象。即使组件的注册顺利进行,温莎似乎也没有找到合适的组件。我的情况具体是某些组件可以很好地解决,而其他组件则抛出异常。值得注意的是,即使存在我无法手动解决的依赖关系,构造函数依赖关系注入也能正常工作。
运行时会抛出:
Castle.MicroKernel.ComponentNotFoundException HResult = 0x80131500 消息=找不到支持服务Finance.Events.EventConductor.LoginConductor的组件 来源= Castle.Windsor 堆栈跟踪: 在Castle.MicroKernel.DefaultKernel.Castle.MicroKernel.IKernelInternal.Resolve(类型服务,IDictionary自变量,IReleasePolicy策略,布尔ignoreParentContext) 在Castle.MicroKernel.DefaultKernel.Resolve(类型服务,IDictionary自变量) 在Castle.Windsor.WindsorContainer.ResolveT 在Finance.Framework.Bootstrapper.OnStartup(Object sender,StartupEventArgs e)中的C:\ Users \ User \ source \ repos \ Project \ Project \ Framework \ Bootstrapper.cs:line 39 在System.Windows.Application.OnStartup(StartupEventArgs e) 在System.Windows.Application。<。ctor> b__1_0(未使用对象) 在System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调,对象args,Int32 numArgs) 在System.Windows.Threading.ExceptionWrapper.TryCatchWhen(对象源,委托回调,对象args,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.
}
非常感谢您的帮助。
答案 0 :(得分:1)
您看到此错误,因为您正在尝试为node test.js
解决服务,但没有为{{1}注册一个服务 }。
您正在为LoginConductor
实现的服务 LoginConductor
注册组件。
如果以上听起来令人困惑,并且斜体字不清楚,请there's a good primer in the documentation about it。
通过这种方式,解决方案将使您解析的服务与您的依赖项的 service 保持一致。是将ILoginConductor
保留为服务,还是将LoginConductor
保留为服务,取决于您的特定上下文。