使用ninject.extensions.conventions多次绑定服务

汉斯马德

当使用ninject约定来绑定几个接口的所有实现时,我遇到了以下问题:

public interface IServiceA { }
public interface IServiceB { }

public class Service : IServiceA, IServiceB { }

public class FooA
{
    public Foo(IEnumerable<IServiceA> a)
    {
       // a has 2 instances of Service
    }  
}

public class FooB
{
    public Foo(IEnumerable<IServiceB> b)
    {
       // b has 2 instances of Service
    }  
}

// ...
kernel.Bind(x => x
    .FromThisAssembly()
    .SelectAllClasses().InheritedFrom<IServiceA>().
    BindAllInterfaces());

kernel.Bind(x => x
    .FromThisAssembly()
    .SelectAllClasses().InheritedFrom<IServiceB>().
    BindAllInterfaces());

var a = new FooA(kernel.GetAll<IServiceA>());
var b = new FooB(kernel.GetAll<IServiceB>());

我应该如何配置绑定以便仅获取Serviceninjected的单个实例

雷莫·格洛

最有可能的是,如果其中两个组件中可能包含一个组件,则您的约定不好。但是从这样一个抽象的场景中无法分辨。您应该考虑一下,例如使用命名约定:

kernel.Bind(x => x
.FromThisAssembly()
.SelectAllClasses().EndingWith("Service").
BindAllInterfaces());

或引入基本接口:

kernel.Bind(x => x
.FromThisAssembly()
.SelectAllClasses().InheritedFrom<IService>().
BindAllInterfaces());

或引入属性,按名称空间选择...。有很多方法。另一个选择是分两步选择类:

kernel.Bind(x => x
.FromThisAssembly().SelectAllClasses().InheritedFrom<IServiceA>()
.Join().FromThisAssembly().SelectAllClasses().InheritedFrom<IServiceB>().
BindAllInterfaces());

如果服务类型的配置不同,则可以在绑定之一中排除特殊情况:

kernel.Bind(x => x
.FromThisAssembly().SelectAllClasses().InheritedFrom<IServiceA>()
.Exclude<Service>().
BindAllInterfaces());

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Ninject Conventions Extension进行绑定?

来自分类Dev

NLog如何通过Ninject和Ninject.Extensions.Logging绑定到ILogger

来自分类Dev

将Ninject和Ninject.Extensions.Convention与引用的程序集一起使用

来自分类Dev

使用Reactive Extensions轮询Web服务并绑定最后x个结果

来自分类Dev

我应该使用什么ninject绑定?

来自分类Dev

使用NInject进行上下文绑定

来自分类Dev

Quartz.net和Ninject:如何使用NInject将实现绑定到我的工作

来自分类Dev

使用基于Ninject约定的绑定的正确方法是什么?

来自分类Dev

使用Ninject在特定对象子树中的不同绑定

来自分类Dev

使用两个类型的通用参数进行Ninject绑定

来自分类Dev

使用Ninject绑定相同类型的多个版本

来自分类Dev

如何将服务与Ninject约定绑定

来自分类Dev

多次使用绑定参数

来自分类Dev

使用Microsoft.Extensions.Hosting.WindowsServices时无法启动Windows服务

来自分类Dev

使用带有Ninject和WPF的Caliburn.Micro在视图模型之间绑定/传递数据

来自分类Dev

如何在ASP.NET MVC 4中使用Ninject从Web.config绑定设置?

来自分类Dev

如何通过Ninject使用泛型将接口绑定到类?

来自分类Dev

我可以使用Ninject将布尔值绑定到命名构造函数值

来自分类Dev

使用隐式自绑定时,Ninject选择无参数构造函数

来自分类Dev

Ninject-使用单个接口的多个类(有多个匹配的绑定可用)

来自分类Dev

使用ninject将ASP.Net Identity对象绑定到Func

来自分类Dev

将Ninject内核绑定到Constant并使用InTransientScope有什么意义?

来自分类Dev

使用ninject将ASP.Net Identity对象绑定到Func

来自分类Dev

为什么我不能使用Ninject绑定System.IO.Abstractions?

来自分类Dev

如何使用Ninject支持动态多重注入,其中可能没有绑定项

来自分类Dev

使用 Ninject 上下文绑定时如何检索属性和属性?

来自分类Dev

Ninject:绑定身份UserManager

来自分类Dev

Ninject绑定101

来自分类Dev

Ninject覆盖绑定

Related 相关文章

  1. 1

    如何使用Ninject Conventions Extension进行绑定?

  2. 2

    NLog如何通过Ninject和Ninject.Extensions.Logging绑定到ILogger

  3. 3

    将Ninject和Ninject.Extensions.Convention与引用的程序集一起使用

  4. 4

    使用Reactive Extensions轮询Web服务并绑定最后x个结果

  5. 5

    我应该使用什么ninject绑定?

  6. 6

    使用NInject进行上下文绑定

  7. 7

    Quartz.net和Ninject:如何使用NInject将实现绑定到我的工作

  8. 8

    使用基于Ninject约定的绑定的正确方法是什么?

  9. 9

    使用Ninject在特定对象子树中的不同绑定

  10. 10

    使用两个类型的通用参数进行Ninject绑定

  11. 11

    使用Ninject绑定相同类型的多个版本

  12. 12

    如何将服务与Ninject约定绑定

  13. 13

    多次使用绑定参数

  14. 14

    使用Microsoft.Extensions.Hosting.WindowsServices时无法启动Windows服务

  15. 15

    使用带有Ninject和WPF的Caliburn.Micro在视图模型之间绑定/传递数据

  16. 16

    如何在ASP.NET MVC 4中使用Ninject从Web.config绑定设置?

  17. 17

    如何通过Ninject使用泛型将接口绑定到类?

  18. 18

    我可以使用Ninject将布尔值绑定到命名构造函数值

  19. 19

    使用隐式自绑定时,Ninject选择无参数构造函数

  20. 20

    Ninject-使用单个接口的多个类(有多个匹配的绑定可用)

  21. 21

    使用ninject将ASP.Net Identity对象绑定到Func

  22. 22

    将Ninject内核绑定到Constant并使用InTransientScope有什么意义?

  23. 23

    使用ninject将ASP.Net Identity对象绑定到Func

  24. 24

    为什么我不能使用Ninject绑定System.IO.Abstractions?

  25. 25

    如何使用Ninject支持动态多重注入,其中可能没有绑定项

  26. 26

    使用 Ninject 上下文绑定时如何检索属性和属性?

  27. 27

    Ninject:绑定身份UserManager

  28. 28

    Ninject绑定101

  29. 29

    Ninject覆盖绑定

热门标签

归档