AutoFace实现依赖注入

23 篇文章 1 订阅

1,常规的通过注入实实现控制反转的方式(构造注入,方法注入,属性注入)不多说了,其他概念百度查一下就好,上代码最直接

 //数据操作接口
        public interface IDatabase
        {
            string Name { get; }

            void Select(string commandText);

            void Insert(string commandText);

            void Update(string commandText);

            void Delete(string commandText);
        }

        //实现
        public class SqlDatabase : IDatabase
        {
            public string Name
            {
                get { return "sqlserver"; }
            }

            public void Select(string commandText)
            {
                Console.WriteLine(string.Format("'{0}' is a query sql in {1}!", commandText, Name));
            }

            public void Insert(string commandText)
            {
                Console.WriteLine(string.Format("'{0}' is a insert sql in {1}!", commandText, Name));
            }

            public void Update(string commandText)
            {
                Console.WriteLine(string.Format("'{0}' is a update sql in {1}!", commandText, Name));
            }

            public void Delete(string commandText)
            {
                Console.WriteLine(string.Format("'{0}' is a delete sql in {1}!", commandText, Name));
            }
        }

        //实现
        public class OracleDatabase : IDatabase
        {
            public string Name
            {
                get { return "oracle"; }
            }

            public void Select(string commandText)
            {
                Console.WriteLine(string.Format("'{0}' is a query sql in {1}!", commandText, Name));
            }

            public void Insert(string commandText)
            {
                Console.WriteLine(string.Format("'{0}' is a insert sql in {1}!", commandText, Name));
            }

            public void Update(string commandText)
            {
                Console.WriteLine(string.Format("'{0}' is a update sql in {1}!", commandText, Name));
            }

            public void Delete(string commandText)
            {
                Console.WriteLine(string.Format("'{0}' is a delete sql in {1}!", commandText, Name));
            }
        }

        //调用
        public class DatabaseManager
        {
            IDatabase _database;

            public DatabaseManager(IDatabase database)  //通过构造注入(方法和属性就是注入重点在于 IDatabase 类型的传入 )
            {
                if (_database == null)
                {
                    _database = database;
                }
            }

            public void Search(string commandText)
            {
                _database.Select(commandText);
            }

            public void Add(string commandText)
            {
                _database.Insert(commandText);
            }

            public void Save(string commandText)
            {
                _database.Update(commandText);
            }

            public void Remove(string commandText)
            {
                _database.Delete(commandText);
            }

        }

2,通过autoface实现注入达到控制反转的目的

 2,1 在VS中用 nuget

2,2上代码

           var builder = new ContainerBuilder(); //创建容器
            builder.RegisterType<DatabaseManager>(); //注册 业务操作类
            builder.RegisterType<SqlDatabase>().As<IDatabase>();//注册 接口
            using (var container = builder.Build())
            {
                var manager = container.Resolve<DatabaseManager>();
                manager.Search("SELECT * FORM USER");
            }

2,2通过配置化注入

 var builder = new ContainerBuilder();
            builder.RegisterType<DatabaseManager>();
            builder.RegisterModule(new ConfigurationSettingsReader("autofac"));
            using (var container = builder.Build())
            {
                var manager = container.Resolve<DatabaseManager>();
                manager.Search("SELECT * FORM USER");
            }

简单写到这里!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值