如何通过匹配Castle Windsor中的命名空间自动注册?

问题描述 投票:0回答:1

在写这篇文章之前,我检查了许多答案和文章,但我没有成功。我想注册从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模式?

谢谢,

c# castle-windsor inject dependency-resolver
1个回答
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.

© www.soinside.com 2019 - 2024. All rights reserved.