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

时间:2018-09-12 10:58:18

标签: c# castle-windsor inject dependency-resolver

在撰写本文之前,我检查了许多答案和文章,但未成功。 我想注册所有从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
}

此匹配或包含模式如何在温莎城堡中使用?

谢谢

1 个答案:

答案 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.

相关问题