zoukankan      html  css  js  c++  java
  • ioc autofac简单示例

    1.winform用法:

    nuget安装autofac

    public interface ILog
        {
            bool Log(string msg);
        }
        public class TXTLogger : ILog
        {
            public bool Log(string msg)
            {
                Console.WriteLine(msg + " saved in file log.log");
                return true;
            }
        }
        public class DBLogger : ILog
        {
            public bool Log(string msg)
            {
                Console.WriteLine(msg + " saved in mssqlserver");
                return true;
            }
        }
    
        public class UserService
        {
            public ILog log;
            public UserService(ILog ilog) //构造函数注入
            {
                log = ilog;
            }
    
            public bool AddUser()
            {
                log.Log("insert user succeed ,userId is :1");
                return true;
            }
        }
         Autofac.IContainer container;
    
            private void Form1_Load(object sender, EventArgs e)
            {//注册
                ContainerBuilder builder = new ContainerBuilder();
                builder.RegisterType<DBLogger>().As<ILog>();
                builder.RegisterType<TXTLogger>().As<ILog>();//后注册的会覆盖之前注册的
                builder.RegisterType<UserService>();
                container = builder.Build();
    
    
                Test();
        }
          
      void Test()
            {

    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
    }

    
            }

    2.mvc用法:

    安装 autofac和autofac.mvc5:

    global.asax.cs中

    protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
    
    
           //mvc注册  参考:http://www.w2*bc.com/article/180590
                ContainerBuilder builder = new ContainerBuilder();
               
                builder.RegisterControllers(Assembly.GetExecutingAssembly()).AsSelf().PropertiesAutowired();
                builder.RegisterType<DBLogger>().As<ILog>().InstancePerLifetimeScope();
                builder.RegisterType<TXTLogger>().As<ILog>().InstancePerLifetimeScope();//后注册的会覆盖之前注册的
                builder.RegisterType<UserService>().InstancePerLifetimeScope();
                var container = builder.Build();
    
                DependencyResolver.SetResolver(new AutofacDependencyResolver(container));


    //webapi注册
    //WebApi Register
    //builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).AsSelf().PropertiesAutowired();
    //builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
    /builder.RegisterWebApiModelBinderProvider();
    }

    controller中调用Test方法 

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

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

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

    3.属性注入:

    public class AA
        {
            public BB bb;
            public AA()
            {
            }
    
            public void TestAA()
            {
                bb.TestBB();
            }
        }
        public class BB
        {
            public void TestBB()
            {
                Console.WriteLine("TestBB Executed!");
            }
        }
           

           ContainerBuilder builder = new ContainerBuilder(); builder.RegisterType<BB>(); builder.Register(c => new AA() { bb = c.Resolve<BB>() }); //属性注入 var container = builder.Build();
    var a = container.Resolve<AA>(); a.TestAA(); //输出:TestBB Executed!
    
    

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

  • 相关阅读:
    HDU 1394 Minimum Inversion Number
    LA 3938 动态最大连续和(线段树)
    HDU 1754 I Hate It(线段树)
    HDU 1166 敌兵布阵(线段树 or 二叉索引树)
    《乞力马扎罗的雪》读书笔记
    LA 3266 田忌赛马
    UVa 11235 频繁出现的数值
    《月亮与六便士》读书笔记
    LA 3135 阿格斯(优先队列)
    LA 3027 合作网络
  • 原文地址:https://www.cnblogs.com/xuejianxiyang/p/7064974.html
Copyright © 2011-2022 走看看