是否有可能在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());
我怎么能写一个安装程序,它将注册所有的类,这些类是已经注册的类的依赖,但仅此而已。换句话说:我如何编写一个通用安装程序,它将注册IDep1和IDep2,但不注册IDep3(因为IDep3没有被任何IService使用)?
您可以尝试使用.Where
过滤类型。
container.Register(Classes.FromThisAssembly()
.BasedOn(typeof(IService))
.WithServiceSelf()
.WithServiceBase()
.Where(type => !(type is IDep3))
.LifestyleTransient());
看文档
但是我觉得这样做"气味"-也许有另一个接口,IDep1
和IDep2
将继承而IDep3
不会,并通过该接口进行注册