C# 如何使用Castle';什么是流畅的API?

C# 如何使用Castle';什么是流畅的API?,c#,castle-windsor,C#,Castle Windsor,我的项目中有一些类,它们位于某个通用名称空间的子名称空间中。例如: 命名空间中的ClassFoo,ClassFoo1,ClassFoo2 MyProject.GeneralNamespace.NamespaceA ClassBar,ClassBar1,ClassBar2在命名空间MyProject.GeneralNamespace.NamespaceB中 要使用Castle Windsor fluent API注册所有这些类,我必须执行以下操作: Classes.FromThisAssemb

我的项目中有一些类,它们位于某个通用名称空间的子名称空间中。例如:

  • 命名空间中的
    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(),
Classes.FromThisAssembly().InSameNamespaceAs().WithServiceDefaultInterfaces(),
Classes.FromThisAssembly().InSameNamespaceAs().WithServiceDefaultInterfaces(),
拥有更多的名称空间会产生更多的代码


我想我有点不对劲。有没有一种方法可以用一条语句注册所有这些类?

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

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

当然,可能会有更复杂的过滤器。

如果您只是尝试在“this”程序集中注册每个类型,则不需要指定
InSameNamespaceAs
。但是,如果您只选择要注册的名称空间的子集,我不知道还有更好的方法;您必须列出要在某处注册的名称空间。