MVC中 依赖注入(IOC)

1)Unity 配置文件

<?xml version="1.0" encoding="utf-8"?>
<unity>
  <typeAliases>
    <typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,Microsoft.Practices.Unity"/>
    <!--action的构造函数需要接口定义,依赖注入需要接口-->
    <typeAlias alias="IFoo" type="MyTest.BizInterfaces.IFoo,MyTest.BizInterfaces"/>

  </typeAliases>
  <containers>
    <container name="containerOne">
      <types>
        <!--action的构造函数需要接口定义,依赖注入需要接口-->
        <type type="IFoo" mapTo="MyTest.Business.Foo, MyTest.Business"/>
      </types>
    </container>
  </containers>
</unity>

2)UnityConfigurator

namespace MyTest.Common.IOC
{
    public class UnityConfigurator
    {
        public static IUnityContainer CreateContainer()
        {
            IUnityContainer parentContainer = new UnityContainer();
            IUnityContainer childContainer = parentContainer.CreateChildContainer();
            UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
            section.Configure(childContainer, "containerOne");
            return childContainer;
        }
    }
}

3)UnityControllerFactory

 namespace MyTest.Common.IOC
{
    public class UnityControllerFactory : DefaultControllerFactory
    {
        readonly IUnityContainer container;

        public UnityControllerFactory(IUnityContainer container)
        {
            this.container = container;
            var controllerTypes =
               from t in Assembly.GetExecutingAssembly().GetTypes()
               where typeof(IController).IsAssignableFrom(t)
               select t;
            foreach (var t in controllerTypes)
            {
#if DEBUG
                System.Diagnostics.Debug.WriteLine("RegisterType: " + t.Name);
#endif
                container.RegisterType(t);
            }
        }

        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            if (controllerType == null) return null;
            return (IController)container.Resolve(controllerType);
        }
    }
}

4) Under Register Routes

 public static void RegisterRoutes(RouteCollection routes)
        {
            AreaRegistration.RegisterAllAreas();
            RegisterGlobalFilters(GlobalFilters.Filters);
            Infratructure.RouteConfigurator.RegisterRoutes(RouteTable.Routes);

            IUnityContainer container = UnityConfigurator.CreateContainer();
            UnityControllerFactory factory = new UnityControllerFactory(container);
            ControllerBuilder.Current.SetControllerFactory(factory);
        }
时间: 2024-08-02 02:34:22

MVC中 依赖注入(IOC)的相关文章

大话DI依赖注入+IOC控制反转(二) 之 浅析.Net Core中的DI与IOC

原文:大话DI依赖注入+IOC控制反转(二) 之 浅析.Net Core中的DI与IOC   转发时请注明原创作者及地址,否则追究责任.原创:alunchen 在上一篇文章中,我们聊了很多关于定义的方面,比较孤燥,下面我们结合.Net Core聊一下依赖注入&控制反转. 三种对象生命周期 关于.Net Core中的容器,有三种对象的生命周期,这个从网上搜索也有大堆的资料.为了循序渐进,我们这里介绍一下. Transient 称为短暂,意思是需要使用时就创建一个新的对象.从容易层面讲,当从容器取出

android使用篇(四) 注解依赖注入IOC实现绑定控件

在android使用篇(三) MVC模式中提到一个问题: 1) 视图层(View):一般採用XML文件进行界面的描写叙述,使用的时候能够很方便的引入,可是用xml编写了,又须要在Acitvity声明而且实例化,有点麻烦,考虑是否能做一个类似注解实现匹配,或者写一个类获取xml的各个节点然后自己主动进行封装,当然,这仅仅是个想法,以后再实现. 今天最终把这个想法实现了,使用依赖注入IOC注解实现对activity中控件的实例化. 先普及一下java的反射机制和注解机制的知识: 下面引用大神的两篇文

MVC Castle依赖注入实现代码

1.MVc 实现依赖注入 public class WindsorControllerFactory : DefaultControllerFactory { private readonly IKernel _kernel; public WindsorControllerFactory(IKernel kernel) { _kernel = kernel; } protected override IController GetControllerInstance(System.Web.Ro

spring中依赖注入方式总结

Spring中依赖注入的四种方式 在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入  这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的setter方法注入 首先要配置被注入的bean,在该bean对应的类中,应该有要注入的对象属性或者基本数据类型的属性.例如:为UserBiz类注入UserDAO,同时为UserBiz注入基本数据类型String,那么这时,就要为UserDAO对象和String类型设置se

007.ASP.NET MVC控制器依赖注入

原文链接:http://www.codeproject.com/Articles/560798/ASP-NET-MVC-Controller-Dependency-Injection-for-Be 前言:在这篇文章中,我将通过一个demo,直截了当地说明依赖注入在MVC框架中的使用. 内容列表: 1.介绍 2.为什么使用控制器依赖注入 3.控制器静态结构 4.自定义控制器 5.Framework中控制器的创建 6.为什么使用控制器工厂模式 7.控制器工厂模式 7.1.目标1 7.2.目标2 8.

【Spring】Spring依赖注入IOC的设值注入setter

其实标题中如此高大上的名词,只是一个问题,关于在Spring的applicationContext.xml中的如下语句是什么意思? <property name="aService" ref="aService"/> 这类语句在SSH的配置中会大量存在,因为Spring所谓的核心机制就是Spring依赖注入IOC.下面举一个例子说明这个问题: 先贴上目录结构: 在Eclipse中新建一个Java工程,不是JavaWeb,在这个Java配置好Spring3

从壹开始前后端分离【 .NET Core2.0 Api + Vue 3.0 + AOP + 分布式】框架之九 || 依赖注入IoC学习 + AOP界面编程初探

代码已上传Github,文末有地址 说接上文,上回说到了<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之八 || API项目整体搭建 6.3 异步泛型+依赖注入初探>,后来的标题中,我把仓储两个字给去掉了,因为好像大家对这个模式很有不同的看法,嗯~可能还是我学艺不精,没有说到其中的好处,现在在学DDD领域驱动设计相关资料,有了好的灵感再给大家分享吧. 到目前为止我们的项目已经有了基本的雏形,后端其实已经可以搭建自己的接口列表了,框架已

ASP.NET MVC3实战系列(三):MVC3中使用依赖注入(IOC)

第一就是我们暴露了HomeController的repository的属性. 第二我们在类内部new了一个对象,假如我们这次是从数据库中得到Lovers,下次想从文件或者Web Service里去数据时,我们必须修改Controller里的代码. 在这一节里我们引入一个依赖注入的工具Ninject. 点击安装 修改HomeController为如下代码 这样我们就不需要暴露属性了,修改对应的单元测试为如下图所示.测试顺利通过 但是,当我们运行程序时出错了,因为MVC在实例化Controller时

关于依赖注入IOC/DI的感想

之前一直不明白依赖注入有什么好处,甚至觉得它是鸡肋,现在想想,当时真是可笑. 这个想法正如同说接口是没有用处一样. 当整个项目非常庞大,各个方法之间的调用非常复杂,那么,可以想象一下,假设说没有任何的分离模块的想法,各个关系非常的复杂,不便于维护以及查找bug等等.这个时候,就需要一个东西,去将这么多复杂的玩意分离开来,很喜欢的一句话:高内聚,低耦合. 举个栗子,现在一个很简单的功能,可能只需要通过一些方法互相调用就可以实现,OK,那么随着需求的增多,现在添加了几个功能,那么,我们把相同的东西划