• 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

  • 相关阅读:
    盘点国产数据库墨天轮年终排行(2021)
    python代码格式风格 PEP 8
    python 函数与方法的区别
    【Vue】从搭建环境到使用 VSCode
    如何落地业务建模(1) 业务建模、DDD
    如何落地业务建模(2) 实践DDD时常见的问题
    从落地效果看,如何基于SequoiaDB构建「PB级数据」股份制银行内容管理平台
    开张了
    远程桌面工具mobaxterm
    求职vs招聘交锋中的交流技巧 朱燚:
  • 原文地址:https://www.cnblogs.com/xuejianxiyang/p/7064974.html
Copyright © 2020-2023  润新知