gpt4 book ai didi

c# - CaSTLe Windsor - 使用工厂方法注册所有接口(interface)

转载 作者:行者123 更新时间:2023-11-30 12:16:33 25 4
gpt4 key购买 nike

我有很多接口(interface):

  • IFirstProvider
  • ISecondProvider
  • ITirdProvider
  • 等..

我正在尝试注册所有这些接口(interface),以便它们使用工厂方法来获取实例:

container.Register
(
AllTypes
.FromThisAssembly()
.Where(t => t.IsInterface && t.Name.EndsWith("Provider"))
.Configure(c => c.UsingFactoryMethod(f => f.Resolve<DictionaryAdapterFactory>().GetAdapter<object>(c.ServiceType, session))
);

但这似乎行不通。相反,我必须使用 for 循环来注册所有这些接口(interface):

List<Type> providers = new List<Type>
(
Assembly
.GetExecutingAssembly()
.GetTypes()
.Where(x => x.IsInterface && x.Name.EndsWith("Provider"))
);

foreach (Type provider in providers)
{
Type temp = provider;

container.Register
(
Component
.For(temp)
.UsingFactoryMethod(f => f.Resolve<DictionaryAdapterFactory>().GetAdapter<object>(temp, session))
);
}

除了使用 for 循环之外,还有更好的方法来注册这些接口(interface)吗?

最佳答案

Windsor < 3.0 中没有更好的内置方式

从 Windsor 3 开始,您可以使用 Types 而不是 AllTypes

AllTypes 实际上意味着所有非抽象类

Types 实际上是指所有 类型。

是的,虽然这确实有点糟糕并且违反直觉,但由于 AllTypes 排在第一位,我们无法更改其现有行为以保持向后兼容性。此外,为了保持理智,建议使用 Classes 而不是 AllTypes,因此您最终会为类和 注册 Classses类型,用于您问题中的这种情况。

关于c# - CaSTLe Windsor - 使用工厂方法注册所有接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5175490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com