如何使用 Castle 的 Fluent API 在嵌套命名空间中注册组件

本文关键字:命名空间 嵌套 注册 组件 API 何使用 Castle Fluent | 更新日期: 2023-09-27 18:30:52

我的项目中有一些类驻留在某个通用命名空间的子命名空间中。例如:

  • ClassFooClassFoo1ClassFoo2在命名空间中 MyProject.GeneralNamespace.NamespaceA
  • ClassBarClassBar1ClassBar2命名空间MyProject.GeneralNamespace.NamespaceB中。

要使用 Castle-Windsor fluent API 注册所有这些类,我必须执行以下操作:

Classes.FromThisAssembly().InSameNamespaceAs<ClassFoo>().WithServiceDefaultInterfaces(),
Classes.FromThisAssembly().InSameNamespaceAs<ClassBar>().WithServiceDefaultInterfaces(),

拥有更多的命名空间会导致更多的代码。

我想我有问题。有没有办法用一个语句注册所有这些类?

如何使用 Castle 的 Fluent API 在嵌套命名空间中注册组件

事实上,没有必要指定 InSameNamespaceAs。要注册命名空间的子集,我们可以按命名空间的名称过滤程序集的类:

Classes.FromThisAssembly().
            Where(c => 
                c.Namespace != null && c.Namespace.Contains("MyProject.GeneralNamespace")
            ).WithServiceDefaultInterfaces());

当然,可能会有更精细的过滤器。