Autofac 控制反转(1)

控制反转:把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组建的装配和管理。
    (对组件对象控制权的转移,从程序代码本身转移到外部容器)
常用的IoC组件有:  
spring.net , 
Unity, 
Castle Windsor,
Autofac,
StructureMap, 
Ninject 
由于网上各方评论都说Autofac效率较高,所以先写一个demo,激励一下自己以后继续写博客。。。

demo

 1  var container = new ContainerBuilder();    // 建立容器
 2             container.RegisterType<DbRespository>();   // 在容器中注册信息
 3             container.RegisterType<SqlServerRespository>().AsImplementedInterfaces();
 4             //container.RegisterType<RedisRespository>().AsImplementedInterfaces();
 5             //container.RegisterInstance(new RedisRespository()).AsImplementedInterfaces();
 6 
 7             // 从App.config 文件进行读取
 8             container.RegisterModule(new ConfigurationSettingsReader("autofac"));
 9 
10             using (var obj = container.Build())
11             {
12                 var manager = obj.Resolve<DbRespository>();
13                 manager.Execute();
14             }
15             Console.Read();
View Code

在外部文件App.config进行配置

 1   <configSections>
 2     <section name="autofac" type="Autofac.Configuration.SectionHandler,Autofac.Configuration" />
 3   </configSections>
 4   <startup>
 5     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
 6   </startup>  
 7 
 8   <autofac defaultAssembly="AutofacDemo">
 9     <components>
10       <component type="AutofacDemo.OracleRespository, AutofacDemo" service="AutofacDemo.IRespository" />
11     </components>
12   </autofac>
View Code

通过以上代码,不难看出。建立的container容器,通过Autofac引入外部文件,然后完成IOC的反转控制。

跳到内部你会发现,其实内部就是通过反射生成对应的类,完成外部的控制。

看来,以后得深入研究一下反射了。。。

posted @ 2015-10-20 11:36  地下的知了  Views(219)  Comments(0Edit  收藏  举报