繁体   English   中英

如何通过在温莎城堡中匹配名称空间来自动注册?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM