gpt4 book ai didi

c# - 通过反射遍历类型时如何过滤掉 <>c_DisplayClass 类型?

转载 作者:IT王子 更新时间:2023-10-29 04:29:31 25 4
gpt4 key购买 nike

我正在尝试创建一个单元测试,以确保我的所有业务类(我称它们为命令和查询类)都可以使用 Windsor 进行解析。我有以下单元测试:

    [TestMethod]
public void Windsor_Can_Resolve_All_Command_And_Query_Classes()
{
// Setup
Assembly asm = Assembly.GetAssembly(typeof(IUnitOfWork));
IList<Type> classTypes = asm.GetTypes()
.Where(x => x.Namespace.StartsWith("MyApp.DomainModel.Commands") || x.Namespace.StartsWith("MyApp.DomainModel.Queries"))
.Where(x => x.IsClass)
.ToList();

IWindsorContainer container = new WindsorContainer();
container.Kernel.ComponentModelBuilder.AddContributor(new SingletonLifestyleEqualizer());
container.Install(FromAssembly.Containing<HomeController>());

// Act
foreach (Type t in classTypes)
{
container.Resolve(t);
}
}

失败并出现以下异常:

No component for supporting the service MyApp.DomainModel.Queries.Organizations.OrganizationByRegistrationTokenQuery+<>c__DisplayClass0 was found

我明白 <>c__DisplayClass0类型是由于正在编译 Linq,但是如何在不对 Linq 查询中的名称进行硬编码的情况下过滤掉这些类型?

最佳答案

我会检查 System.Runtime.CompilerServices.CompilerGeneratedAttribute 的每个类型放在这些上面。

您可以使用 Type.IsDefined ,所以代码看起来像这样:

foreach (Type type in classTypes)
{
if (type.IsDefined (typeof (CompilerGeneratedAttribute), false))
continue;

// use type...
}

关于c# - 通过反射遍历类型时如何过滤掉 <>c_DisplayClass 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6513648/

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