是否有可能在Castle Windsor安装程序中注册所有依赖项或仅注册给定类的依赖项?

本文关键字:依赖 注册 Castle 有可能 Windsor 安装 是否 程序 | 更新日期: 2023-09-27 17:53:26

考虑以下一组类:

public interface IService { }
public interface IDep1 { }
public interface IDep2 { }
public interface IDep3 { }
public class Dep1 : IDep1 { }
public class Dep2 : IDep2 { }
public class Dep3 : IDep3 { } // this one is not used
public class Service1 : IService
{
    public Service1(IDep1 dep1) { }
}
public class Service2 : IService
{
    public Service2(IDep1 dep1, IDep2 dep2) { }
}

我正在使用下面的Castle Windsor安装程序来注册从IService继承的所有类:

container.Register(Classes.FromThisAssembly()
  .BasedOn(typeof(IService))
  .WithServiceSelf()
  .WithServiceBase()
  .LifestyleTransient());

我怎么能写一个安装程序,它将注册所有的类,这些类是已经注册的类的依赖,但仅此而已。换句话说:我如何编写一个通用安装程序,它将注册IDep1IDep2,但不注册IDep3(因为IDep3没有被任何IService使用)?

是否有可能在Castle Windsor安装程序中注册所有依赖项或仅注册给定类的依赖项?

您可以尝试使用.Where过滤类型。

container.Register(Classes.FromThisAssembly()
  .BasedOn(typeof(IService))
  .WithServiceSelf()
  .WithServiceBase()
  .Where(type => !(type is IDep3))
  .LifestyleTransient());

看文档

但是我觉得这样做"气味"-也许有另一个接口,IDep1IDep2将继承而IDep3不会,并通过该接口进行注册