[英]How to auto register by matching namespace in Castle Windsor?
在撰写本文之前,我检查了许多答案和文章,但未成功。 我想注册从1个特定接口IInject
派生的所有类
我有一个这样的接口:
public interface IFoo : IInject
{
string GetOrder();
}
要自动注册IFoo,我可以这样在Ninject中进行注册:
kernel.Bind(c =>
c.FromAssembliesMatching("Core.*.dll")
.SelectAllIncludingAbstractClasses()
.InheritedFrom<IInject>()
.BindAllInterfaces());
但是在温莎城堡我不能。 如果您必须知道IInject接口是一个空接口,仅用于触发自动注册:
public interface IInject
{
//Nothing in this interface
}
该匹配或包含模式如何在温莎城堡中使用?
谢谢,
问题的标题询问有关按名称空间进行匹配的问题,而问题本身询问的是标记接口。
温莎都有可能。
在提供答案之前,我强烈建议您仔细阅读Windsor的文档 。 Ninject和Windsor之间在哲学上存在重大差异,它将帮助您避免将来出现潜在的麻烦。
现在,回到您的问题,如果您想按名称空间进行注册,则可以执行以下操作:
container.Register(Classes.FromThisAssembly()
.InSameNamespaceAs<IInject>()
.WithService.DefaultInterfaces() // or whatever makes sense
.LifestyleTransient()); // or whatever makes sense
对于通过标记界面进行注册,您需要执行以下操作:
container.Register(Classes.FromThisAssembly()
.BasedOn<IInject>()
.WithService.DefaultInterfaces() // or whatever makes sense
.LifestyleTransient()); // or whatever makes sense
同样,不要只是复制/粘贴代码,而是要确保您完全了解它在这里的作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.