按惯例为特定服务的每个组件注册一个具有多个名称的服务

时间:2013-02-08 12:52:47

标签: c# castle-windsor ioc-container castle

我使用Castle-Windsor 3.1和C#4.0。

我按惯例注册了一些组件(视图),比如

            Classes.FromThisAssembly()
                .BasedOn(typeof(ITabPageView<>))
                .WithServiceFromInterface(typeof(ITabPageView<>))
                .LifestyleTransient()
                .Configure(c => c.Properties(PropertyFilter.IgnoreAll))

这可以按预期工作。我现在想要的是,为每个 ITabPageView组件注册一个服务类型的另一个组件。 在具体示例(PRISM)中,我想为每个已注册的TabPage注册IRegionManager,并使用该标签页的名称。区域经理必须由已经注册的中央区域经理创建。 目前我这样做:

            Classes.FromThisAssembly()
                .BasedOn(typeof(ITabPageView<>))
                .WithServices(typeof(IRegionManager))
                .Configure(c =>
                    {
                        c.UsingFactoryMethod(kernel => kernel.Resolve<IRegionManager>().CreateRegionManager())
                            .Named(c.Implementation.Name);
                    })

虽然这实际上似乎有效但我想知道是否有更优雅或更健壮的方式。

感谢名单。

0 个答案:

没有答案