gpt4 book ai didi

c# - 将 ComponentRegistration 向下转换为非泛型类型

转载 作者:行者123 更新时间:2023-11-30 21:54:58 24 4
gpt4 key购买 nike

我正在使用 CaSTLe.Windsor 库,我想要的是从 IRegistration[] 中的所有项目中获取“实现”属性。

我有以下接口(interface)和类:

public interface IA
{
int a { get; set; }
}

public class A : IA
{
public int a { get; set; }
}

public interface IB
{
int b { get; set; }
}

public class B : IB
{
public int b { get; set; }
}

还有一个包含这个组件的静态类:

  public static class Bootekstraperek
{
private static readonly IRegistration[] _commonRegistrations =
{
Component.For<IA>().ImplementedBy<A>(),
Component.For<IB>().ImplementedBy<B>()
};

public static void Test()
{
List<IRegistration> list = _commonRegistrations.ToList();

foreach (var registration in list)
{
ComponentRegistration a = registration as ComponentRegistration;
Console.WriteLine(a.Implementation.FullName);
}
}
}

当然,变量 a 在每次迭代后都为 null。它仅在我转换为 Generic ComponentRegistration 时有效

var a = registration as ComponentRegistration<A>;

但是,如果我在这个数组中有太多不同的组件,那对我没有帮助。所以 Switch 语句不是一个选项。我尝试过使用反射,但我仍然无法正确转换。

如何使用或不使用反射来实现我想要的?

谢谢。

最佳答案

这并不容易,因为 IRegistration API 从未打算以这种方式使用。

所以我的回答分为两部分。

  1. 你怎么做。使用动态

您只需更改一小部分代码:

foreach (dynamic registration in list)
{
Console.WriteLine(registration.Implementation.FullName);
}
  1. 您在此尝试实现的基本目标是什么?如果您的目标是对注册的内容、注册方式保持一定程度的可见性,并留意潜在问题,请查看 Windsor 的诊断。

关于c# - 将 ComponentRegistration 向下转换为非泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32710444/

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