Castle.Windsor:ResolveAll的名字

时间:2014-03-12 10:37:57

标签: c# inversion-of-control castle-windsor

我是使用Castle.Windsor进行IoC的新手。现在,我想注册UI元素以插入主窗体(SWF)中的某些点。因此,我有树节点来注入这些元素,例如Application.MainWindow.Navigation.MyModule。使用

container.Register(Component
   .For<System.Windows.Forms.Control>()
   .ImplementedBy<MyControlClass>()
   .Named("Application.MainWindow.Navigation.MyModule") // this is the plug-in path
   .LifestyleTransient());

应该在此之前完成。

在应用程序主窗体中,我需要访问容器内的控件并评估它们存储的路径。但据我所知,通过迭代

container.ResolveAll<Control>()

我不会将路径设置为每个UI元素的名称。

有没有办法访问路径或甚至更好的方法来实现这一点(使用Castle)?

提前致谢。 :)

1 个答案:

答案 0 :(得分:0)

您可以使用OnCreate自定义Castle.Windsor创建组件的方式 您可以为名为MyControlClass的类Path定义一个属性,并像这样初始化它(伪代码)

container.Register(Component
    .For<System.Windows.Forms.Control>()
    .ImplementedBy<MyControlClass>()
    .Named("Application.MainWindow.Navigation.MyModule") // this is the plug-in path
    .LifestyleTransient()
    .OnCreate((myControlClass) => myControlClass.Path = "Application.MainWindow.Navigation.MyModule")
);

这样您就可以在注册期间自定义组件的创建。您可以使用将在解决方案之间应用的操作列表,并将组件重新调整为代码