Ioc Autofac心得

对于这个容器注入,个人也不是很熟悉,很多还不懂,只会基本的操作,几天把它记录下来,说不定以后帮助就大了呢,这方面跟安卓差距还是挺大的

下面记录下应用的流程

步骤:

1.添加应用

2.重写工厂(这里讲的是常用的构造方法注入方式)

 1 public class CreateAutofacFactory : DefaultControllerFactory
 2     {
 3         public override IController CreateController(RequestContext requestContext, string controllerName)
 4         {
 5             //获取容器
 6             IContainer ic = CreateControllers.CreateController().Icontainer;
 7             //获取控制器类型
 8             Type t = this.GetControllerType(requestContext, controllerName);
 9             //从容器中解析出对象
10             return ic.Resolve(t) as IController;
11         }
12     }
View Code
 1 public class CreateControllers
 2     {
 3         private CreateControllers() { }
 4         private static CreateControllers createController;
 5         public static CreateControllers CreateController()
 6         {
 7             if (createController == null)
 8                 createController = new CreateControllers();
 9             return createController;
10         }
11         private IContainer iContainer { get; set; }
12         public IContainer Icontainer
13         {
14             get 
15             {
16                 if (iContainer == null)
17                 {
18                     ContainerBuilder cb = new ContainerBuilder();
19                     //用代码注册类型
20                     //cb.RegisterType<StudentDao>().As<IStudentDao>();
21                     //cb.RegisterType<StudentManager>().As<IStudentManager>();
22                     //cb.RegisterType<HomeController>();
23 
24                     //从配置文件注册类型
25                     cb.RegisterModule(new ConfigurationSettingsReader("autofac"));
26                     iContainer = cb.Build();//创建容器
27                 }
28                 return iContainer;
29             }
30         }
31     }
View Code

3.启动(更换)工厂

 1 public class MvcApplication : System.Web.HttpApplication
 2     {
 3         protected void Application_Start()
 4         {
 5             AreaRegistration.RegisterAllAreas();
 6 
 7             WebApiConfig.Register(GlobalConfiguration.Configuration);
 8             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
 9             RouteConfig.RegisterRoutes(RouteTable.Routes);
10             BundleConfig.RegisterBundles(BundleTable.Bundles);
11 
12             //换ControllerFactory(服务器一启动就更换工厂)
13             ControllerBuilder.Current.SetControllerFactory(new CreateAutofacFactory());
14         }
15     }
View Code

4.添加配置文件

 1 <configSections>
 2     <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
 3     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
 4   
 5     <!--在配置文件中添加配置节点 name是配置节点的标签名 
 6         type是读取配置节点内容的类 格式:命名空间名.类名,程序集名-->
 7     <section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/>
 8   
 9   </configSections>
10 
11 <autofac>
12     <components>
13         <component type="Winning.Tjgi.Backstage3G.UI.Controllers.HomeController,Winning.Tjgi.Backstage3G.UI"
14                />
15 <component
16              type="test.Dal.UserDao,test.Dal"
17              service="test.IDal.IUserDao,test.IDal"/>
18 <component
19               type="test.Bll.UserManager,test.Bll"
20               service="test.IBll.IUserManager,test.IBll" />
21 </components>
22   </autofac>
View Code

5.构造函数

1         IUserManager uMan = null;
2         public HomeController(IUserManager uMan)
3         {
4             this.uMan = uMan;
5         }    
View Code

五步走起,如果过程出错的话基本上都是配置文件配置出错,还有就是经常忘记更新dll类库,在这里要建议下把类库的输出路径改成到UI项目里,经常动手才会记忆深刻,一直在努力中,希望能走出自己的道路,虽然脆弱,却不退缩。

转载于:https://www.cnblogs.com/LiuZhen/p/4023836.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开启关闭mysql日志

//mysql开启sql日志 SET GLOBAL log_output TABLE;SET GLOBAL general_log ON; //mysql关闭sql日志 SET GLOBAL log_output TABLE; SET GLOBAL general_log OFF; ---查询mysql运行过的sql SELECT * from mysql.general_log ORDER BY event_time DESC;

深入学习Web Service系列----异步开发模式

概述 在本篇随笔中&#xff0c;通过一些简单的示例来说一下Web Service中的异步调用模式。调用Web Service方法有两种方式&#xff0c;同步调用和异步调用。同步调用是程序继续执行前等候调用的完成&#xff0c;而异步调用在后台继续时&#xff0c;程序也继续执行&#xff0c;不…

java 实现excel样式设置(居中、字体、大小、换行、合并行,列宽、指定特定字符串样式等)

HSSFWorkbook workbook new HSSFWorkbook(); Sheet sheet workbook.createSheet(); sheet.setColumnWidth(0, 30*256);//设置当前sheet页第一列宽度 sheet.setColumnWidth(1, 70*256);//第二列宽度 CellStyle style workbook.createCellStyle(); Font font workbook.cre…

可选依赖项

有时您正在编写的库可能具有可选的依赖项。 例如“如果apache http客户端在类路径上&#xff0c;请使用它&#xff1b;否则&#xff0c;请使用它。 否则–退回到HttpURLConnection”。 为什么要这么做&#xff1f; 由于各种原因–在分发库时&#xff0c;您可能不想强加较大的依…

XML-RPC协议学习

XML-RPC调用包括2部分&#xff1a;客户端client&#xff08;调用线程&#xff09;、服务器端server&#xff08;被调用的线程&#xff09;。服务端是通过特定的URL获得的&#xff0c;调用过程如下&#xff1a; 1.客户端程序使用XML-RPC客户端发出作业请求&#xff0c;指定方法名…

extjs tree 遍历树节点并设置选中

function initTreeChecked(){//获取根节点 var rootnoe Ext.getCmp("id").getRootNode();; setAllNodes(rootnoe); } //遍历所有节点 function setAllNodes(node){ setNodeChecked(node);//设置选中 var nodesnode.childNodes; for(var i0;i<…

Android开发中调用系统窗口的方法

//直接拨号 Intent callIntent new Intent(Intent.ACTION_CALL,Uri.parse("tel:12345678")); startActivity(callIntent); //将电话号码传入拨号程序 Intent dialIntent new Intent(Intent.ACTION_DIAL,Uri.parse("tel:12345678")); startActivity(dial…

navicate导出导入表数据问题

1.导出导入json&#xff0c;如下图&#xff0c;右击表点击导出向导&#xff0c;选择json导出类型&#xff0c;根据提示导出即可。 导入时&#xff0c;右击接收的表&#xff0c;点击导入向导&#xff0c;根据提示即可快速导入&#xff08;注&#xff1a;不同系统之间导出导入易…

spring pojo_使用Spring将POJO公开为JMX MBean

spring pojo这是一个非常不错的教程&#xff0c;介绍了如何通过我们最新的JCG合作伙伴 “ The Holy Java ”博客&#xff08;很酷的名字&#xff09;实现“ 用Spring轻松将POJO作为JMX MBean公开 ”。 &#xff08;注意&#xff1a;对原始帖子进行了少量编辑以提高可读性&#…

android地图实时标记

问题描述我在用百度地图给上边做标注的时候&#xff0c;用了一下主要代码&#xff1a;class MyOverlayItem extends ItemizedOverlay<OverlayItem>{ private ArrayList<OverlayItem> mOverlayList new ArrayList<OverlayItem>();private double mLat1 34.0…

tongweb通过控制台简单设置确认相关常用参数

1.环境版本 jdk&#xff0c;tongweb版本确认是否正确 2.检查tongweb的 license是不是永久版本&#xff0c;试用期版本到期会停止服务。 3 JVM运行编码配置-根据系统需要配置 3.1-Dfile.encodingUTF-8 编码根据系统需要配置 4. tongweb运行内存大小--根据系统需要配置 4.1一般 …

编译原理--LL(1)分析法实验C++

一、实验项目要求 1.实验目的 根据某一文法编制调试LL&#xff08;1&#xff09;分析程序&#xff0c;以便对任意输入的符号串进行分析。本次实验的目的主要是加深对预测分析LL&#xff08;1&#xff09;分析法的理解。 2.实验要求 对下列文法&#xff0c;用LL&#xff08;…

实际中进行GC调整

调优垃圾回收与任何其他性能调优活动没有什么不同。 您需要确保了解当前的情况和期望的结果&#xff0c;而不是因为对应用程序的随机部分进行调整而产生了诱惑。 通常&#xff0c;只需执行以下过程即可&#xff1a; 陈述您的绩效目标 运行测试 测量 与目标比较 进行更改并…

达梦数据库出现卡慢简单分析点

1.检查是否有锁表 查询锁表&#xff1a;select sess_id,sql_text from v$sessions sess,v$lock lck where sess.trx_idlck.trx_id and lck.blocked1; --查询僵死会话 解锁&#xff1a;根据会话ID&#xff0c;停止会话 sp_close_session(sess_id); 2.根据v$sessions,V$L…

对象的属性

首先要理解的是“实例变量”。 我们在__init__方法中并不是创建了实例变量&#xff0c;我们是添加了一个或者多个属性给实际的对象 在__init__内部 self.x 5和外部 f.x 5没有什么不同。 那么类呢&#xff1f; 1 >>> class Bar(object): 2 pass 3 4 >>>…

hibernate.session.get()方法不能获取表中最新数据解决方式样例

1.A a (A)session.get(A.class, id); sess.createSQLQuery("update A set name where id ").executeUpdate(); A a1 (A)session.get(A.class, id);//a1中获取不到修改后的name值 sess.refresh(a1);//刷新a1对象&#xff0c;取出数据库数据 注&#xff1a;hibern…

hibernate 映射_Hibernate映射集合性能问题

hibernate 映射首先&#xff0c;本文的灵感来自于Burt Beckwith在2011年1月27日于SpringOne 2GX上发表的有关高级GORM –性能&#xff0c;自定义和监视的演讲 。 简而言之&#xff0c; Burt Beckwith讨论了使用映射集合和GORM中的Hibernate 2级缓存的潜在性能问题&#xff0c;以…

SEL selector (二)

SEL消息机制工作原理是什么 引用下面文章&#xff1a; 我们在之前有提到,一个类就像一个 C 结构.NSObject 声明了一个成员变量: isa. 由于 NSObject 是所有类的根类,所以所有的对象都会有一个 isa 的成员变量[公共继承].而该 isa 变量指向该对象的类(图3.15)[类在Objective-C中…

Ext grid 根据行号获取行数据

var storeExt.getCmp(grid_id).store;// var storerowstore.getAt(row_num);//行数据 var phonenumberstorerow.get(phonenumber);//列信息 //------------------------------------------------------------------------- var dataExt.getCmp(grid_id).store.data; var d…

mobile cpu上禁用alpha test的相关总结

因为&#xff0c;每家芯片的特性不同&#xff0c;根据向framebuffer写法的不同&#xff0c;分为tile-based的mobile cpu&#xff0c;如ImgTec PowerVR&#xff0c;ARM Mali&#xff0c;一部分老版本Qualcomm Adreno。还有标准的direct&#xff08;immediate&#xff09;的mobil…