Autofac使用

Autofac是一种比较常用的依赖注入组件,官方地址:http://autofac.org/

下面是例子:

1、首先创建实体

     /// <summary>
    /// Id Identity Interface
    /// </summary>
    public interface Identity
    {
        int Id { get; set; }
    }

    public class User : Identity
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

 2、创建数据库访问接口

    /// <summary>
    /// Database operate interface
    /// </summary>
    public interface IDatabase
    {
        string Name { get; }

        void Select(string commandText);

        void Insert(string commandText);

        void Update(string commandText);

        void Delete(string commandText);
    }

 3、创建数据库访问组件

     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 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));
        }
    }

 4、创建数据库访问管理器

    public class DatabaseManager
    {
        IDatabase _database;
        User _user;

        public DatabaseManager(IDatabase database) : this(database, null)
        {
        }

        public DatabaseManager(IDatabase database, User user)
        {
            _database = database;
            _user = user;
        }

        /// <summary>
        /// Check Authority
        /// </summary>
        /// <returns></returns>
        public bool IsAuthority()
        {
            bool result = _user != null && _user.Id == 1 && _user.Name == "leepy" ? true : false;
            if (!result)
                Console.WriteLine("Not authority!");

            return result;
        }

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

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

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

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

 5、配置

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <configuration>
 3   <configSections>
 4     <section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/>
 5   </configSections>
 6   <autofac defaultAssembly="AutofacDemo">
 7     <components>
 8       <component type="AutofacDemo.SqlDatabase, AutofacDemo" service="AutofacDemo.IDatabase" />
 9     </components>
10   </autofac>
11 </configuration>

 6、测试

    using Autofac;
    using Autofac.Configuration;
    
    class Program
    {
        static void Main_1(string[] args)
        {
            var builder = new ContainerBuilder();
            builder.RegisterType<DatabaseManager>();
            //builder.RegisterType<SqlDatabase>().As<IDatabase>();
            builder.RegisterType<OracleDatabase>().As<IDatabase>();
            using (var container = builder.Build())
            {
                var manager = container.Resolve<DatabaseManager>();
                manager.Search("SELECT * FORM USER");
            }
        }

        static void Main_2(string[] args)
        {
            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");
            }
        }

        static void Main_3(string[] args)
        {
            var builder = new ContainerBuilder();
            //builder.RegisterType<DatabaseManager>();
            builder.RegisterModule(new ConfigurationSettingsReader("autofac"));
            builder.Register(c => new DatabaseManager(c.Resolve<IDatabase>()));
            using (var container = builder.Build())
            {
                var manager = container.Resolve<DatabaseManager>();
                manager.Search("SELECT * FORM USER");
            }
        }

        static void Main(string[] args)
        {
            User user = new User { Id = 1, Name = "leepy" };
            //User user = new User { Id = 2, Name = "zhangsan" };
            var builder = new ContainerBuilder();
            builder.RegisterModule(new ConfigurationSettingsReader("autofac"));
            builder.RegisterInstance(user).As<User>();
            builder.Register(c => new DatabaseManager(c.Resolve<IDatabase>(), c.Resolve<User>()));

            using (var container = builder.Build())
            {
                var manager = container.Resolve<DatabaseManager>();
                manager.Add("INSERT INTO USER ...");
            }

            Console.ReadKey();
        }
    }

 

posted @ 2015-08-06 08:24  自然去留  阅读(235)  评论(0)    收藏  举报