我正在努力找到找到我的Ninject配置"模块"(指定类型绑定的地方)的最佳位置.我希望我只是错过了一些明显的技巧,因为使用流畅的配置(因此Ninject)开始变成了一个交易破坏者:
在一个包含三个独立项目的简单Web堆栈中:Web,BusinessLogic,DataAccess.我不希望Web层必须直接引用DataAccess层,但我无法看到解决方法,因为:
如果我将DataAccess配置模块放在DataAccess层中,我必须引用DataAccess层,这样我就可以在Web层中实例化Ninject内核时访问配置模块
如果我将DataAccess配置模块放在Web层中,我必须引用DataAccess层才能访问我想要绑定的类型
如果我将DataAccess配置模块放在单独的配置项目中,那么在尝试为web和DataAccess层指定绑定时,我最终会遇到循环引用问题.
IOC的部分好处是允许松散耦合,但据我所知,使用Ninject需要我添加更多我目前拥有的直接项目引用.我错过了什么?
.net configuration dependency-injection ninject inversion-of-control
我是Ninject的新手(和DI一般).
我理解内核如何加载模块,到目前为止我编写的代码往往只有一行:
myKernel.Get<MyApp>()
Run Code Online (Sandbox Code Playgroud)
它从我的模块中的绑定构造我需要的一切.如果在初始化之后需要新实例,那么这些由我绑定初始化的工厂负责.到目前为止,工厂已经没有任何ninject依赖项,只需按需创建对象.
现在我已经达到了一个点,我需要考虑初始化后的对象创建,我自己的工厂模式不再削减它.这将是为(远程)客户端支持pub/sub接口.对于我的服务器的每个新连接,我想IClient根据ninject模块中定义的一组绑定创建新实例.这是否意味着我在初始化时传入的工厂必须有自己的内核(或者对主内核的引用)?CommonServiceLocator的功能在哪里.CSL是否必要?
在我走得太远之前,我认为最好在这里询问其他人如何处理这个问题.