代码之家  ›  专栏  ›  技术社区  ›  E-A

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

  •  0
  • E-A  · 技术社区  · 8 年前

    IInject

    我有这样一个界面:

    public interface IFoo : IInject
    {
        string GetOrder();
    }
    

    要自动注册IFoo,我可以在Ninject中这样:

    kernel.Bind(c =>
     c.FromAssembliesMatching("Core.*.dll")
      .SelectAllIncludingAbstractClasses()
      .InheritedFrom<IInject>()
      .BindAllInterfaces());
    

    但在温莎城堡我不能。 如果必须知道iInput接口是空接口,则只能触发自动注册:

    public interface IInject
    {
       //Nothing in this interface
    }
    

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

    谢谢,

    1 回复  |  直到 8 年前
        1
  •  2
  •   Krzysztof Kozmic    8 年前

    问题的标题是关于按名称空间匹配的,而问题本身是关于标记接口的。

    在给出答案之前,我强烈建议你通读一遍 Windsor's documentation

    现在,回到您的问题,如果您希望按名称空间注册,您可以这样做:

    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.