1.winform用法:

nuget安装autofac

  1. public interface ILog
  2. {
  3. bool Log(string msg);
  4. }
  5. public class TXTLogger : ILog
  6. {
  7. public bool Log(string msg)
  8. {
  9. Console.WriteLine(msg + " saved in file log.log");
  10. return true;
  11. }
  12. }
  13. public class DBLogger : ILog
  14. {
  15. public bool Log(string msg)
  16. {
  17. Console.WriteLine(msg + " saved in mssqlserver");
  18. return true;
  19. }
  20. }
  21.  
  22. public class UserService
  23. {
  24. public ILog log;
  25. public UserService(ILog ilog) //构造函数注入
  26. {
  27. log = ilog;
  28. }
  29.  
  30. public bool AddUser()
  31. {
  32. log.Log("insert user succeed ,userId is :1");
  33. return true;
  34. }
  35. }
  1.     Autofac.IContainer container;
  2.  
  3. private void Form1_Load(object sender, EventArgs e)
  4. {//注册
  5. ContainerBuilder builder = new ContainerBuilder();
  6. builder.RegisterType<DBLogger>().As<ILog>();
  7. builder.RegisterType<TXTLogger>().As<ILog>();//后注册的会覆盖之前注册的
  8. builder.RegisterType<UserService>();
  9. container = builder.Build();
  10.  
  11. Test();
  12.     }
  13.  
  14. void Test()
  15. {

var service = container.Resolve<UserService>(); //解析;并没有实例化new UserService也没有传入构造函数参数,autofac自动注入了
if (service!=null)
{
    var result = service.AddUser(); //输出insert user succeed ,userId is :1 saved in file log.log
}

  1. }

2.mvc用法:

安装 autofac和autofac.mvc5:

global.asax.cs中

  1. protected void Application_Start()
  2. {
  3. AreaRegistration.RegisterAllAreas();
  4. FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  5. RouteConfig.RegisterRoutes(RouteTable.Routes);
  6. BundleConfig.RegisterBundles(BundleTable.Bundles);
  7.  
  8.        //mvc注册 参考:http://www.w2*bc.com/article/180590
  9. ContainerBuilder builder = new ContainerBuilder();
  10.  
  11. builder.RegisterControllers(Assembly.GetExecutingAssembly()).AsSelf().PropertiesAutowired();
  12. builder.RegisterType<DBLogger>().As<ILog>().InstancePerLifetimeScope();
  13. builder.RegisterType<TXTLogger>().As<ILog>().InstancePerLifetimeScope();//后注册的会覆盖之前注册的
  14. builder.RegisterType<UserService>().InstancePerLifetimeScope();
  15. var container = builder.Build();
  16.  
  17. DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
  18.  
  19. //webapi注册
  1. //WebApi Register
  2. //builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).AsSelf().PropertiesAutowired();
  3. //builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
  4. /builder.RegisterWebApiModelBinderProvider();
  1. }

controller中调用Test方法

  1. public static void Test()
  2. {
  3. //var log = DependencyResolver.Current.GetService<ILog>();
  4. //var result = log.Log("test msg");
  5.  
  6. var service = DependencyResolver.Current.GetService<UserService>();
  7. if (service != null)
  8. {
  9. service.AddUser(); //输出insert user succeed ,userId is :1 saved in file log.log
  10. }
  11.  
  12. }

参考:http://www.cnblogs.com/hkncd/archive/2012/11/21/2780041.html

参考:http://www.w2b*c.com/article/180590

3.属性注入:

  1. public class AA
  2. {
  3. public BB bb;
  4. public AA()
  5. {
  6. }
  7.  
  8. public void TestAA()
  9. {
  10. bb.TestBB();
  11. }
  12. }
  13. public class BB
  14. {
  15. public void TestBB()
  16. {
  17. Console.WriteLine("TestBB Executed!");
  18. }
  19. }
  1.       
  2.  
  3.        ContainerBuilder builder = new ContainerBuilder();
  4. builder.RegisterType<BB>();
  5. builder.Register(c => new AA() { bb = c.Resolve<BB>() }); //属性注入
  6. var container = builder.Build();
  7. var a = container.Resolve<AA>();
  8. a.TestAA(); //输出:TestBB Executed!
  1.  

From:http://www.cnblogs.com/xuejianxiyang/p/7064974.html

ioc autofac简单示例的更多相关文章

  1. Autofac 简单示例

    公司不用任何IOC,ORM框架,只好自己没事学学. 可能有些语言描述的不专业 希望能有点用 namespace Autofac { class Program { //声明一个容器 private s ...

  2. 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)

    一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...

  3. spring原理案例-基本项目搭建 03 创建工程运行测试 spring ioc原理实例示例

    下面开始项目的搭建 使用 Java EE - Eclipse 新建一 Dynamic Web Project Target Runtime 选 Apache Tomcat 7.0(不要选 Apache ...

  4. AutoFac简单入门

    AutoFac是.net程序下一个非常灵活易用,且功能强大的DI框架,本文这里简单的介绍一下使用方法. 安装: Install-Package Autofac 简单的示例: static void M ...

  5. 依赖注入(二)Autofac简单使用

    Autofac简单使用 源码下载传上源码,终于学会传文件了. 首先 还是那句话:“不要信我,否则你死得很惨!”. C#常见的依赖注入容器 IoC in .NET part 1: Autofac IoC ...

  6. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  7. C# 构建XML(简单示例)

    C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...

  8. 根据juery CSS点击一个标签弹出一个遮罩层的简单示例

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. ACEXML解析XML文件——简单示例程序

    掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...

随机推荐

  1. 虚拟机上使用 opecnv 读取USB摄像头无法显示

    使用opecv读取USB摄像头时候,无法显示图像. 设置 首先查看虚拟机Ubuntu检测摄像头是否已正常插入: ls /dev/video* 结果为: 设置虚拟机USB属性: USB的兼容性设置为US ...

  2. rm: cannot remove `xxx’: Operation not permitted问题的处理方案

    第一步:22.txt lsattr 22.txt 查看文件属性 看到的情况 -----a------- 第二步:去除a的属性 chattr -a 22.txt 第三步:在此执行删除 rm 22.txt

  3. sql拼接列字符串

    1.使用函数(sql2000以上) )) ) AS BEGIN ) select @v = isnull(@v + ',','')+code FROM dict WHERE type=@filter ...

  4. [转] shell逻辑运算总结, 包括[[]]与[]的区别,&&与-a的区别,||与-o的区别

    [From] https://www.cnblogs.com/tony1314/p/8315666.html 1. 关于文件和目录 -f  判断某普通文件是否存在 -d  判断某目录是否存在 -b  ...

  5. scrapy抓取中文后乱码解决方法

    出现这种东西不是乱码,是unicode,只是人看不懂,例如: \u96a8\u6642\u66f4\u65b0> \u25a0\u25a0\u25a 我们把他解码成中文码即可,在settings ...

  6. 【数据服务中间件】一、HttpServlet

    一.概念 Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http GenericServlet和HttpServlet 3个方法代表了Servle ...

  7. ISE报警:关键字 unsigned不可用于verilog

    问题:关键字 unsigned不可用于verilog 解决方案:去掉unsigned

  8. c++ 网络编程(四) LINUX/windows下 socket 基于I/O复用的服务器端代码 解决多进程服务端创建进程资源浪费问题

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9613861.html 好了,继上一篇说到多进程服务端也是有缺点的,每创建一个进程就代表大量的运 ...

  9. Tcp参数优化

    net.core.netdev_max_backlog = 400000 #该参数决定了,网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目. net.core.opt ...

  10. 通过IntelliJ IDEA忽略掉不需要提交到github的文件

    现如今,开源项目越来越多,存储容器主要有github,国内的码云.开源贡献也是衡量一个开发者是否具有足够的包容能力.技术能力的重要标准. 有些开发者没注意到这些,好心提交开源项目,配置文件也提交上去, ...