依赖注入容器-Autofac

介绍一款依赖注入的容器AutoFac,一直非常迷惑依赖注入到底有独特的优势或者好处,感觉如果用策略模式和反射等也是可以实现这个解耦的,不管怎么样还是先来大概了解依赖注入到底是怎么一回事。
             首先来看个例子,如果你想要一把锤子你会怎么做?(这个例子是我百度上看到的,觉得挺形象的)

1.自己造,打铁,锻造等。

2.或者你找制造锤子的工厂订购

3.打开淘宝,下单,支付

上面的例子在程序开发中分别有什么不同:第一种方式显而易见非常麻烦,从开发角度看就是高度耦合,导致使用和制造混在一起,一旦代码变动很难重复使用。第二种方式相对来说比较方便了,需要什么只需要找到对应的制造商,类似开发中的接口编程。第三种方式是最为方便的,淘宝上应有尽有而这个淘宝就是这个容器,淘宝卖家上架了商品,然后你只需要根据你的需要找到这个商品下单即可,无需弄清楚卖家是通过什么渠道获得的商品,而这个就是依赖注入容器的优势。

autofac是一款轻量级的ioc框架,接下去我简单介绍下如何使用.

 1     public class Apple:IFruits
 2     {
 3         public string Get(string sql)
 4         {
 5             return "苹果";
 6         }
 7     }
 8     public class Banana: IFruits
 9     {
10         public string Get(string sql)
11         {
12             return "香蕉";
13         }
14     }
15     public class DBMange
16     {
17         public IFruits_dal;
18         //构造函数需要一个水果接口   相当于制造商        public DBMange(IFruits dal)
19         {
20             _dal = dal;
21         }
22         public string Get()
23         {
24             return  _dal.Get("");
25         }
26     }

 1     /// <summary>
 2     /// 单例模式
 3     /// </summary>
 4     public class AutofacContainer
 5     {
 6         private static ContainerBuilder buider = null;
 7         /// <summary>
 8         /// 考虑线程安全
 9         /// </summary>
10         private static readonly object LockHelper = new object();
11         public ContainerBuilder Createbuilder()
12         {
13             if (buider != null)
14            {
15                 return buider;
16            }
17             else
18             {
19                 lock (LockHelper)
20                 {
21                    var builder = new ContainerBuilder();
22                     //注入DBMange    相当于淘宝卖家
23                      builder.RegisterType<DBMange>();
24                     //注入苹果         结合上面的例子 相当于就是需要的锤子
25                     builder.RegisterType<Apple>().As<IFruits>();
26                     buider = builder;
27                     return buider;
28                 }
29             }
30         }
31     }

1 //autofacContainer    相当于淘宝
2 AutofacContainer autofacContainer = new AutofacContainer();
3 using (var container = autofacContainer.Createbuilder().Build())
4 {
5    //从淘宝(container)中找到卖家(DBMange)  至于制造商就不管了 这是卖家该关心的事了
6     ValID.Text = container.Resolve<DBMange>().Get();
7 }

上面的卖家中只有一种水果就是苹果,那如果有多种水果会出现什么情况呢?

//上面的错误大概意思就是卖家不知道该给你哪一种水果了 //所以必须指出你具体需要的水果的名称
              builder.RegisterType<Apple>().Named<IFruits>("apple");--注入的时候先说明,然后按名称获取
              builder.RegisterType<Banana>().Named<IFruits>("banana");(Apple)container.ResolveNamed<IFruits>("apple").Get("");----输出为苹果

//当然淘宝上有非常多的卖水果的卖家 如何选择那一个卖家 也是一样的道理

上面简单介绍了下autofac,也大概说明了容器的优势,仅供参考。(上面的例子是网上的,数据库选择版本稍微改动了下)

我参考的数据库选择的版本:http://www.cnblogs.com/liping13599168/archive/2011/07/16/2108209.html

时间: 2024-10-13 22:52:48

依赖注入容器-Autofac的相关文章

依赖注入容器Autofac的详解[转]

依赖注入容器Autofac的详解 发表于 2011 年 09 月 22 日 由 renfengbin 分享到:GMAIL邮箱         Hotmail邮箱 delicious digg Autofac和其他容器的不同之处是它和C#语言的结合非常紧密,在使用过程中对你的应用的侵入性几乎为零,更容易与第三方的组件集成,并且开源,Autofac的主要特性如下: 1,灵活的组件实例化:Autofac支持自动装配,给定的组件类型Autofac自动选择使用构造函数注入或者属性注入,Autofac还可以

依赖注入容器Autofac的详解

Autofac和其他容器的不同之处是它和C#语言的结合非常紧密,在使用过程中对你的应用的侵入性几乎为零,更容易与第三方的组件集成,并且开源,Autofac的主要特性如下: 1,灵活的组件实例化:Autofac支持自动装配,给定的组件类型Autofac自动选择使用构造函数注入或者属性注入,Autofac还可以基于lambda表达式创建实例,这使得容器非常灵活,很容易和其他的组件集成.2,资源管理的可视性:基于依赖注入容器构建的应用程序的动态性,意味着什么时候应该处理那些资源有点困难.Autofac

依赖注入容器Autofac与MVC集成

Autofac是应用于.Net平台的依赖注入(DI,Dependency Injection)容器,具有贴近.契合C#语言的特点.随着应用系统的日益庞大与复杂,使用Autofac容器来管理组件之间的关系可以"扁平化"错综复杂的类依赖,具有很好的适应性和便捷度.  在该篇博文中,我们将应用Autofac,以依赖注入的方式建立传统ASP.NET页面与服务/中间层之间的联系,建立"呈现"与"控制"的纽带. 那么,如何将依赖注入(Dependency I

浅析依赖注入框架Autofac的使用

Autofac是一款IOC框架,比起Spring.NET,Unity,Castle等等框架,它很轻量级且性能也很高,下面小编给大家介绍下依赖注入框架Autofac的使用. 下面通过代码给大家分享下依赖注入框架Autofac的使用,具体如下所示:  Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上也是很高的. 1)解压它的压缩包,主要看到Autofac.dll,Autofac.Configuration.dll,

依赖注入之Autofac使用总结

依赖倒置?控制反转(IOC)? 依赖注入(DI)? 你是否还在被这些名词所困扰,是否看了大量理论文章后还是一知半解了? 今天我想结合实际项目,和正在迷惑中的新手朋友一起来学习和总结依赖注入Autofac的使用和理解. 依赖注入粗暴理解 依赖:  public class A { public void A(B b) { // do something } } 这样的代码,估计没有程序猿不曾使用. A类实例化的时候需要一个B的对象作为构造函数的参数,那么A就依赖B,这就叫依赖. 当然,不用构造函数

.Net Core 3.0依赖注入替换 Autofac

今天早上,喜庆的更新VS2019,终于3.0正式版了呀~ 有小伙伴问了一句Autofac怎么接入,因为Startup.ConfigureServices不能再把返回值改成IServiceProvider了,原来的替换依赖注入容器就不可行了,我随口说了一下Host上面.UseServiceProviderFactory 本以为就这么简单,他问我要个例子,自己折腾了一下,发现事情没有这么简单 .UseServiceProviderFactory<TContainer>要搭配Startup里面写一个

如何编写一个简单的依赖注入容器

随着大规模的项目越来越多,许多项目都引入了依赖注入框架,其中最流行的有Castle Windsor, Autofac和Unity Container. 微软在最新版的Asp.Net Core中自带了依赖注入的功能,有兴趣可以查看这里. 关于什么是依赖注入容器网上已经有很多的文章介绍,这里我将重点讲述如何实现一个自己的容器,可以帮助你理解依赖注入的原理. 容器的构想 在编写容器之前,应该先想好这个容器如何使用. 容器允许注册服务和实现类型,允许从服务类型得出服务的实例,它的使用代码应该像 var

YII框架的依赖注入容器

依赖注入(Dependency Injection,DI)容器就是一个对象,它知道怎样初始化并配置对象及其依赖的所有对象. 所谓的依赖就是,一个对象,要使用另外一个对象才能完成某些功能.那么这个对象就依赖于被使用的对象. 例如: /** * 厨师 */ class cook { /** * 制作食物 */ public function cooking() { $food = new food(); echo $food->get(),"汤<br/>"; } } /*

Unity轻量级依赖注入容器

一.前言 Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入.在Nuget里安装unity 二.Unity的API方法 UnityContainer.RegisterType<ITFrom,TTO>();  //注册映射 UnityContainer.RegisterType< ITFrom, TTO >("keyName");//注册映射指定key值 IEnumerable<T> databases = UnityCon