Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何跨程序集使用Ninject_C#_Ninject - Fatal编程技术网

C# 如何跨程序集使用Ninject

C# 如何跨程序集使用Ninject,c#,ninject,C#,Ninject,我可以看到以前也有人问过类似的问题,但由于对DI和.Net完全陌生,我无法掌握整个解决方案,或者可能没有找到正确的来源 我有WebAPI、BL、DL等程序集 WebAPI依赖于BL BL依赖于DL WebAPI不引用DL,我希望保持不变。几乎没有其他程序集,但这足以说明问题 WebAPI有applicationstart部分,因此我可以使用它初始化Ninject内核并注册WebAPI项目的依赖项 如何为BL和其他程序集实现相同的功能?有两种不同的方法,您可以使用自动将每个等轴对象解析为具有相

我可以看到以前也有人问过类似的问题,但由于对DI和.Net完全陌生,我无法掌握整个解决方案,或者可能没有找到正确的来源

  • 我有WebAPI、BL、DL等程序集
  • WebAPI依赖于BL
  • BL依赖于DL
  • WebAPI不引用DL,我希望保持不变。几乎没有其他程序集,但这足以说明问题
WebAPI有applicationstart部分,因此我可以使用它初始化Ninject内核并注册WebAPI项目的依赖项


如何为BL和其他程序集实现相同的功能?

有两种不同的方法,您可以使用自动将每个
等轴对象
解析为具有相同名称的实现(例如
IThing
->
对象
),或者您可以在每个程序集中创建一个(BL中的模块可以加载DL中的模块)

您采取的方法取决于是否需要为不同的对象定义不同的作用域,例如,如果您希望将某些内容解析为可能影响您使用的方法的单例。我认为这很好—在应用程序的最高层创建合成根。对于Web应用程序,这意味着在全局中.asax文件。我可以详细说明这个原因,但是链接的博客文章做得更好


这确实打破了您试图实现的分层,但几乎没有,我认为这是一种合适的方式。如果您的web层适当薄(即,您可以相当容易地用厚客户端替换它)那也不是什么大损失。如果你真的不同意,你可以在BL中为DL创建一个合成根。

谢谢Trevor,我理解这个概念,但不知道如何以及在哪里实现BL程序集中的逻辑。你能提供一个例子说明每个模块如何为Ninject设置内核吗?我正在尝试学习如何解决这个问题还有问题。@Wavel-我已经添加了答案的链接。@user1767363-我不确定您的确切意思。.如果您使用Ninject模块,只需在BL程序集中创建一个模块,然后将其加载到创建Ninject内核的WebApi程序集中。