在撰写本文之前,我检查了许多答案和文章,但未成功。
我想注册所有从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
}
此匹配或包含模式如何在温莎城堡中使用?
谢谢
答案 0 :(得分:1)
问题的标题询问按名称空间进行匹配,而问题本身询问的是标记接口。
温莎都可以。
在提供答案之前,我强烈建议您通读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.