IOC容器的使用

问题描述

使用的是Ninject。问题:1.在实际项目中肯定有很多接口、那么都在IOCNinjectModule类里面绑定注册、但是我看一些人放出的代码也使用IOC容器的、却并没有类似的。也有很多接口为了使用依赖注入都用了一些IOC容器、但是我就是看到有类似的绑定注册的。2.当一个接口有多个实现的时候在IOCNinjectModule类中进行绑定那么:IDALdal=ker.Get<IDAL>();就要改成具体的实现类:IDALdal=ker.Get<Sqlserver>();如果不想让具体实现类出现那么是不是就要定义多个IOCNinjectModule类、里面接口的实现只能有一个这样绑定、只是在使用的时候:IKernelker=newStandardKernel(newIOCNinjectModule());这句换成:IKernelker=newStandardKernel(new具体的绑定注册模块());

解决方案

解决方案二:
不要胡乱抽象,不要再一个专业开发者的程序中胡乱使用“注入”的东西。你先要知道正规的代码怎么写,再纠结注入。
解决方案三:
1.IoC容器为了方便注册,一般都会提供以一定的约定规则批量/自动注册的功能,比如把一个程序集中所有的类都注册为其接口的实现。对于Ninject,可以说就是绑定所有具体类和其实现的接口。LZ看到的代码要不然就是使用了一些批量/自动注册的功能,要不然就是还没找到注册的地方。如果注册的工作不是太多,并且接口及其实现都是编译时已知的,那么最好使用显式的绑定代码。如果需要的绑定非常多,或者比如有插件/模块系统,接口的实现在运行时才能确定,那可以使用IoC容器的批量/自动注册的功能,对于Ninject,就是其扩展。2.接口有多个实现,并且实现具有互斥性,不能够同时使用时,有两种方案,对于LZ的例子:一是使用参数传递给自己的Ninjectmodule。比如在IOCNinjectModule里面定义一个属性,用来指示绑定哪种实现,构造module的时候通过配置系统获取配置,确定用哪种数据库,设置好其属性。在Load中判断这个属性来绑定不同的实现。二是使用命名的绑定,这样的话就需要获取的时候指定名字,就能够获得对应的实现了。IoC框架一般都有很多种选择实现的策略,这个肯定是能满足绝大部分需求的,主要还是看具体用途是什么。另外,Ninject的module一般不是LZ那样按照不同的实现来使用不同的module的,而是根据功能划分的。
解决方案四:
LZ你的写法怎么感觉这么诡异,虽然好久没看ninject了,但一般IOC容器都有个container的,然后统一用一个container或者几个实例化的container进行绑定设置

时间: 2024-09-30 12:51:08

IOC容器的使用的相关文章

Castle IOC容器内幕故事(上)

主要内容 1.WindsorContainer分析 2.MicroKernel分析 3.注册组件流程 一.WindsorContainer分析 WindsorContainer是Castle的IOC容器,也是它的一个核心,先来看一下WindsorContainer在Castle中所处的位置: 图1 WindsorContainer构建于MicroKernel之上,MicroKernel仅仅是提供了一个IOC的容器,非常的轻巧,它只依赖于Castle.Model一个程序集,但它的可扩展能力却很强,

一个比Spring简单的IoC容器

Spring 虽然比起EJB轻量了许多,但是因为它需要兼容许多不同的类库,导致现在Spring还是相当的庞大的,动不动就上40MB的jar包, 而且想要理解Spring的内部运行机制,阅读它的代码非常重要, 但是往往它的代码非常的"多". 现在根据Spring对Bean的生命周期的处理, 编写出一款非常小的IoC容器, 没有了对XML的解析,而是通过对Config对象的构造而完成IoC配置文件的声明, 相比较XML的方式, 对重构软件非常具有好处, 并且这个IoC大部分的实现是依据Sp

如何深入理解DIP、IoC、DI及IoC容器

前言 对于大部分小菜来说,当听到大牛们高谈DIP.IoC.DI以及IoC容器等名词时,有没有瞬间石化的感觉?其实,这些"高大上"的名词,理解起来也并不是那么的难,关键在于入门.只要我们入门了,然后循序渐进,假以时日,自然水到渠成. 好吧,我们先初略了解一下这些概念. 依赖倒置原则(DIP):一种软件架构设计的原则(抽象概念). 控制反转(IoC):一种反转流.依赖和接口的方式(DIP的具体实现方式). 依赖注入(DI):IoC的一种实现方式,用来反转依赖(IoC的具体实现方式). Io

Jbpm4的IOC容器

和Jbpm3一样,Jbpm4实现了自己的IOC容器.以现在的眼光看来,应用程序里 一个IOC容器几乎是居家必备的,否则,又要平白多出一坨一坨的工厂类和单态 类来. 一.Jbpm4 IOC容器介绍 IOC容器的目的是管理组件和实现组件之间的解耦.和Spring里的 BeanFactory对应,Jbpm4里的接口是Context,具体实现则是WireContext. Context实际在Jbpm4里有更多的含义,它与Environment一起,共同构成了代码 运行的运行期环境.在这个环境里可以获取系

Castle学习笔记----初探IOC容器

Windsor是Castle 的一个IOC容器.它构建于MicroKernel之上,功能非常之强大,能检测类并了解使用这些类时需要什么参数,检测类型和类型之间工作依赖性,并提供服务或者发生错误时提供预警的机制. 通常IOC实现的步骤为-->建立容器-->加入组件-->获取组件-->使用组件. 1.建立容器 建立容器也就是IWindsorContainer.接着我门要向容器中注册服务,并告诉容器所注册的服务由那一个类来实现他.通常建立容器我们可以用以下定义来实现: 1IWindsor

Spring源代码解析(二):IOC容器在web容器中的启动

以下引用自博客:http://jiwenke-spring.blogspot.com/ 上面我们分析了IOC容器本身的实现,下面我们看看在典型的web环境中,Spring IOC 容器是怎样被载入和起作用的. 简单的说,在web容器中,通过ServletContext为Spring的IOC容器提供宿主环境,对 应的建立起一个IOC容器的体系.其中,首先需要建立的是根上下文,这个上下文持有的 对象可以有业务对象,数据存取对象,资源,事物管理器等各种中间层对象.在这个上下 文的基础上,和web MV

Spring源代码解析(一):IOC容器

在认真学习Rod.Johnson的三部曲之一:< >,顺便也看了看源代码想知道个究竟,抛砖引玉,有兴趣的同志一起讨论研究吧! 以下内容引自博客:http://jiwenke-spring.blogspot.com/,欢迎指导:) 在Spring中,IOC容器的重要地位我们就不多说了,对于Spring的使用者而言,IOC容器实际上是什么呢?我们可以说BeanFactory就是我们看到的IoC容器,当然了Spring为我们准备了许多种IoC容器来使用,这样可以方便我们从不同的层面,不同的资源位置,

Castle IOC容器与Spring.NET配置之比较

我本人对于Spring.NET并不了解,本文只是通过一个简单的例子来比较一下两者配置之间的区别.在Castle IOC容器中,提出了自动装配(Auto-Wiring)的概念,即由容器自动管理组件之间的依赖关系,我们无需自己编写XML配置文件来配置组件之间的依赖关系.在Spring.NET中也是支持自动装配的,但是并不推荐使用,它贯穿着一种思想就是一切皆为XML配置,这是两者之间最大的一个区别. 关于自动装配,来自于Spring.NET的支持者认为让容器自动管理,会让我们无法控制组件的依赖关系,如

Castle IOC容器组件生命周期管理

主要内容 1.生命处理方式 2.自定义生命处理方式 3.生命周期处理 一.生命处理方式 我们通常创建一个组件的实例使用new关键字,这样每次创建出来的都是一个新的实例,如果想要组件只有一个实例,我们会使用Singleton模式.在Castle IOC中,它支持我们对于组件的实例进行控制,也就是说我们可以透明的管理一个组件拥有多少个实例.Castle IOC容器提供了如下几种生命处理方式: l Singleton:一个组件只有一个实例被创建,所有请求的客户使用程序得到的都是同一个实例,同时这也是C

Castle IOC容器实践之Startable Facility(二)

主要内容 Startable Facility原理分析 -- 在Castle IOC容器实践之Startable Facility(一)中我们已经看到了如何去使用Startable Facility,本文将对它的原理做一些分析.先看一下接口IStartable,它的实现代码如下: public interface IStartable { void Start(); void Stop(); } 代码是相当的简单,只有两个方法,分别在组件创建的时候和销毁的时候执行,这就涉及到了组件的生命周期管理