Castle Windsor流畅配置:是否有可能在不使用具体实现的情况下为给定服务创建特定的生活方式?



我有一个服务集合,我想注册城堡温莎(版本3.0 RC1)使用流畅注册技术。

我想让所有的元素都使用短暂的生活方式,除了一个特殊的元素,我想让那个元素成为单元素,所以我这样做:

container.Register(AllTypes
                       .FromThisAssembly()
                       .InSameNamespaceAs<IMyService>()
                       .WithServiceDefaultInterfaces()
                       .ConfigureIf(s => s.Implementation == typeof(MyService),
                                    s => s.LifestyleSingleton(),
                                    s => s.LifestyleTransient()));

我的问题是,我在ConfigureIf的第一个参数中使用typeof(MyService),但我更喜欢它,如果我能使用IMyService来确定它是否是一个单例(即它不重要实现是什么,它应该始终是一个单例)。这有可能吗?

非常感谢oleksii,他在问题的评论中建议查看这个问题:如何确定一个类型是否实现了特定的泛型接口类型,这个问题的答案是做以下事情:

container.Register(AllTypes
                   .FromThisAssembly()
                   .InSameNamespaceAs<IMyService>()
                   .WithServiceDefaultInterfaces()
                   .ConfigureIf(s => typeof(IMyService).IsAssignableFrom(s.Implementation),
                                s => s.LifestyleSingleton(),
                                s => s.LifestyleTransient()));

相关内容

最新更新