在写这篇文章之前,我检查了许多答案和文章,但我没有成功。我想注册从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
}
如何在Castle Windsor中使用这种MATCHING或CONTAINING模式?
谢谢,
你的问题的标题询问关于命名空间的匹配,而在问题本身你问的是标记界面。
温莎都有可能。
在提供答案之前,我强烈建议您阅读Windsor's documentation。 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
同样,不要只是复制/粘贴代码,但要确保你fully understand what it does here.