如何使用 Castle 的 Fluent API 在嵌套命名空间中注册组件
本文关键字:命名空间 嵌套 注册 组件 API 何使用 Castle Fluent | 更新日期: 2023-09-27 18:30:52
我的项目中有一些类驻留在某个通用命名空间的子命名空间中。例如:
-
ClassFoo
、ClassFoo1
、ClassFoo2
在命名空间中MyProject.GeneralNamespace.NamespaceA
-
ClassBar
、ClassBar1
、ClassBar2
命名空间MyProject.GeneralNamespace.NamespaceB
中。
要使用 Castle-Windsor fluent API 注册所有这些类,我必须执行以下操作:
Classes.FromThisAssembly().InSameNamespaceAs<ClassFoo>().WithServiceDefaultInterfaces(),
Classes.FromThisAssembly().InSameNamespaceAs<ClassBar>().WithServiceDefaultInterfaces(),
拥有更多的命名空间会导致更多的代码。
我想我有问题。有没有办法用一个语句注册所有这些类?
事实上,没有必要指定 InSameNamespaceAs。要注册命名空间的子集,我们可以按命名空间的名称过滤程序集的类:
Classes.FromThisAssembly().
Where(c =>
c.Namespace != null && c.Namespace.Contains("MyProject.GeneralNamespace")
).WithServiceDefaultInterfaces());
当然,可能会有更精细的过滤器。