赞
踩
.NET依赖注入(DI)
依赖注入是做什么用的? 依赖注入又称之为控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。引用自百度百科。
它的好处是什么?去掉了繁琐的生命周期规则!(实例化时生命的先后顺序),让你在项目中随时随地想用就用。
?色哥对他的理解很简单。依赖注入,全称是“依赖注入到容器”, 容器(IOC容器)是一个设计模式,它也是个对象,你把某个类(不管有多少依赖关系)放入这个容器中,可以“解析”出这个类的实例。
DI针对NET有什么框架呢? Nuget有很多资源供大家选择Autofac、Unity、Ninject、StructureMap、Spring.Net以及Castle,色哥比较喜欢Autofa简单易用,abp的土耳其大牛喜欢Castle。 我今天以Autofac为例子供大家参考。
第一步,项目中打开Nuget管理器,搜索Autofac.Mvc并下载。
添加了Autofac后,我们首先在web项目中建立个问题件加services(服务层,当然你也可以建立个其他项目),增加两个接口ICustomerService、IEncryptionService,并且实现他们。
![这里写图片描述](https://img-blog.csdn.net/20161215110941241?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZV9jb2xvcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
内容我细细的写了,主要看控制器和启动项。
然后我们新建一个控制器HomeController,并且增加构造函数如下:
#region Filed && Ctor
private readonly IEncryptionService _encryptionService;
public HomeController(IEncryptionService encryptionService)//这里就自动注入了
{
this._encryptionService = encryptionService;
}
#endregion
// GET: Home
public ActionResult Index()
{
ViewBag.Text = _encryptionService.EncryptText("加密字符串");
//假设,我还有个服务,不需要其他函数调用,只有这里用到,那么可以解析出来使用
//当然我们还可以封装下这个方法。
using (var scope = MvcApplication.container.BeginLifetimeScope())
{
var customerService = scope.Resolve<ICustomerService>();
ViewBag.Count = customerService.GetCustomerCount();
}
return View();
}
然后我们在去设置下 Global
public class MvcApplication : System.Web.HttpApplication
{
#region 注入
//这里一定要注意,首先依赖关系接口一定要设置为静态的,并且是public。不然用到的时候无法调用。
public static IContainer container { get; set; }
public void Dependency()
{
//实例化控制器
var builder = new ContainerBuilder();
//注册类型(映射实现类)
builder.RegisterType<EncryptionService>().As<IEncryptionService>();
builder.RegisterType<CustomerService>().As<ICustomerService>();
//注册到控制器
builder.RegisterControllers(Assembly.GetExecutingAssembly());
container = builder.Build();
//下面就是使用MVC的扩展 更改了MVC中的注入方式.
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
#endregion
protected void Application_Start()
{
Dependency();
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
启动项目试试吧。
大家如果有什么疑问请加群 68848430 咨询。
项目地址稍后更新
项目下载地址:http://download.csdn.net/detail/hb12417058/9712080
扫一扫添加关注,每天都有新知识
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。