我有一个服务集合,我想注册城堡温莎(版本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()));