DI  依赖注入之StructureMap框架

一.简叙:

structureMap只是DI框架中的其中之一。

二.安装及使用:

1.懒人方法:

使用MVC5项目时,可以直接在nuget程序包中安装StructureMap.MVC5;(根据自己的mvc版本安装对应的)

使用webapi项目时,可以直接在nuget程序包中安装StructureMap.WebApi2

 public class DefaultRegistry : Registry
{
#region Constructors and Destructors public DefaultRegistry()
{
Scan(
scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
//For<IExample>().Use<Example>();
For<AWSW.IDAL.IUserDAL>().Use<AWSW.DAL.UserDAL>();
For<AWSW.IBLL.IUserBLL>().Use<AWSW.BLL.UserBLL>();
} #endregion
}

2.勤快人方法:(手动需要写几个类)

通过nuget方式安装structureMap框架,版本根据自己的项目需要选择。

(1)创建容器:

 public class IoC
{
public static IContainer Initialize()
{
return new Container(x =>
{
x.AddRegistry<DefaultRegistry>();
});
}
}

(2)注册:

public class DefaultRegistry : Registry
{
public DefaultRegistry()
{
Scan(x =>
{
x.TheCallingAssembly();
x.WithDefaultConventions();
});
For<IUserDAL>().Use<UserDAL>();
For<IUserBLL>().Use<UserBLL>();
}
}

(3)调用:(global.asax文件中调用来初始化容器)

 var container = IoC.Initialize();

【到此步,在没有使用mvc或webapi项目的时候已经完了】

(4)mvc使用

SetResoler参数是实现IDependencyResolver的类,所以我们写个实现它的类,实现即可

DependencyResolver.SetResolver(new MVCStructureMapDependencyResolver(container));

实现IDependencyResolver接口的类

public class MVCStructureMapDependencyResolver : IDependencyResolver
{
IContainer _container;
public MVCStructureMapDependencyResolver(IContainer container)
{
this._container = container;
}
public object GetService(Type serviceType)
{
try
{
return this._container.GetInstance(serviceType);
}
catch (Exception)
{
return null;
}
} public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return this._container.GetAllInstances(serviceType).Cast<object>();
}
catch (Exception)
{
return null;
}
}
}

(5)webapi使用:

DependencyResolver的属性需要一个实现IDependencyResolver接口类,并且IDependencyResolver接口内BeginScope的方法返回值又是个接口IDependencyScope,于是还得去实现它。就有了如下的代码:

GlobalConfiguration.Configuration.DependencyResolver = new WebApiStructureMapDependencyResolver(container);
public class WebApiStructureMapDependencyResolver : WebApiStructureMapDependencyScope, IDependencyResolver
{
IContainer container;
public WebApiStructureMapDependencyResolver(IContainer container) : base(container)
{
this.container = container;
} IDependencyScope IDependencyResolver.BeginScope()
{
return new WebApiStructureMapDependencyScope(container);
}
} public class WebApiStructureMapDependencyScope : IDependencyScope
{
IContainer container;
public WebApiStructureMapDependencyScope(IContainer container)
{
this.container = container;
} public void Dispose()
{
this.container.Dispose();
} public object GetService(Type serviceType)
{
try
{
return container.GetInstance(serviceType);
}
catch (Exception)
{
return null;
}
} public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return container.GetAllInstances(serviceType).Cast<object>();
}
catch (Exception)
{
return null;
}
}
}

DI 依赖注入之StructureMap框架的更多相关文章

  1. 初识Spring框架实现IOC和DI(依赖注入)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是 ...

  2. JAVAWEB 一一 Spirng(框架,IOC控制反转,DI依赖注入)

    jar包 applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <bea ...

  3. 三大框架 之 Spring(IOC控制反转、DI依赖注入)

    目录 常用词汇 left join与left outer join的区别 Struts2的标签库导入 Spring Spring概述 什么是Spring spring特点 下载 IOC 什么IOC 传 ...

  4. Spring-初识Spring框架-IOC控制反转(DI依赖注入)

    ---恢复内容开始--- IOC :控制反转 (DI:依赖注入)使用ioc模式开发 实体类必须有无参构造方法1.搭建Spring环境下载jarhttp://maven.springframework. ...

  5. 谈谈php里的IOC控制反转,DI依赖注入

    理论 发现问题 在深入细节之前,需要确保我们理解"IOC控制反转"和"DI依赖注入"是什么,能够解决什么问题,这些在维基百科中有非常清晰的说明. 控制反转(In ...

  6. IoC控制反转与DI依赖注入

    IoC控制反转与DI依赖注入 IoC: Inversion of Control IoC是一种模式.目的是达到程序的复用.下面的两篇论文是对IoC的权威解释: InversionOfControl h ...

  7. AngularJS DI(依赖注入)实现推测

    AngularJS DI(依赖注入) http://www.cnblogs.com/whitewolf/archive/2012/09/11/2680659.html 回到angularjs:在框架中 ...

  8. AutoFac IoC DI 依赖注入

    AutoFac IoC DI 依赖注入 记录点点滴滴知识,为了更好的服务后来者! 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌 ...

  9. 轻松学,浅析依赖倒置(DIP)、控制反转(IOC)和依赖注入(DI) 依赖注入和控制反转的理解,写的太好了。

    轻松学,浅析依赖倒置(DIP).控制反转(IOC)和依赖注入(DI) 2017年07月13日 22:04:39 frank909 阅读数:14269更多 所属专栏: Java 反射基础知识与实战   ...

随机推荐

  1. Linux系统构架 - HA集群配置

    一.安装 HA 即(high available)高可用,又被叫做双机热备,用于关键性业务. 简单理解就是,有两台机器 A 和 B,正常是 A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至 ...

  2. C/C++字符串查找函数 <转>

    C/C++ string库(string.h)提供了几个字符串查找函数,如下: memchr 在指定内存里定位给定字符 strchr 在指定字符串里定位给定字符 strcspn 返回在字符串str1里 ...

  3. angularjs 出现 “Possibly unhandled rejection: cancel ”错误

    Try adding this to your config. I had a similar is once and this workaround did the trick. app.confi ...

  4. java中执行子类的构造方法时,会不会先执行父类的构造方法

    会,在创建子类的对象时,jvm会首先执行父类的构造方法,然后再执行子类的构造方法,如果是多级继承,会先执行最顶级父类的构造方法,然后依次执行各级个子类的构造方法.

  5. Cookie&Session会话跟踪技术

    今日内容学习目标 可以响应给浏览器Cookie信息[response.addCookie()] 可以接受浏览器Cookie信息[request.getCookies()] [创建cookie,设置pa ...

  6. 大神的---解决tomcat内存溢出问题----tomcat报错:This is very likely to create a memory leak问题解决

    tomcat memory leak解决方案 这种问题在开发中经常会碰到的,看看前辈的总结经验 Tomcat内存溢出的原因  在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一 ...

  7. Texture Combiner

    [Texture Combiner] After the basic vertex lighting has been calculated, textures are applied. In Sha ...

  8. js动态的给json对象添加新的元素

    把{name:"xxx",age:"xxx"}变成{name:"xxx",age:"xxx",value:"x ...

  9. java常用正则校验工具类

    正则常用校验工具类 import java.util.regex.Pattern; /** * @program: * @description: 校验工具类 * @author: xujingyan ...

  10. ubuntu18桌面卡死解决方法

    1 直接 alt+f2 会弹出个输入框 里边输入 小写 r 回车 这样会重启你的gnome-shell 桌面环境 2 ctrl+f3 进入终端 黑白屏环境 top 一下 你会发现 gnome-shel ...