依赖注入(Autofac)

1.下载autofac压缩包:http://code.google.com/p/autofac/downloads/list

2.解压获得autofac.dll和autofac.configuration.dll文件

依赖注入顾名思义 要存在依赖关系

例如:

   class DataBaseManager
    {
        IDataBase _idatabase;
        public DataBaseManager(IDataBase idatabase)
        {
            
        }
    }

 下面是上图中需要的接口和相应的基类:

 interface IDataBase
    {
        string Name { get;}
        void Select(string commandText);
        void Insert(string commandText);
        void Update(string commandText);
        void Delete(string commandText);
    }
 class SqlDataBase : IDataBase
    {
        public string Name { get { return "sql"; } }
        public void Select(string commandText)
        {
            Console.WriteLine("'{0}'  is  {1}",commandText,Name);
        }
        public void Insert(string commandText)
        {
            Console.WriteLine("'{0}'  is  {1}", commandText, Name);
        }
        public void Update(string commandText)
        {
            Console.WriteLine("'{0}'  is  {1}", commandText, Name);
        }
        public void Delete(string commandText)
        {
            Console.WriteLine("'{0}'  is  {1}", commandText, Name);
        }
    }
    class OracleDataBase : IDataBase
    {
        public string Name { get { return "oracel"; } }
        public void Select(string commandText)
        {
            Console.WriteLine("'{0}'  is  {1}", commandText, Name);
        }
        public void Insert(string commandText)
        {
            Console.WriteLine("'{0}'  is  {1}", commandText, Name);
        }
        public void Update(string commandText)
        {
            Console.WriteLine("'{0}'  is  {1}", commandText, Name);
        }
        public void Delete(string commandText)
        {
            Console.WriteLine("'{0}'  is  {1}", commandText, Name);
        }
    }


下面我们在主函数中通过autofac实现简单的注入:

注入前首先要对部分类进行注册 注册的方法有好多种 RegisterInstance RegisterType  Register RegisterMoudle RegisterControllers RegisterAssemblyTypes 我知道的就这些

static void Main(string[] args)
        {          
            var builder = new ContainerBuilder();
            builder.RegisterType<SqlDataBase>().As<IDataBase>();
            //builder.RegisterInstance(new OracelDataBase()).As<IDataBase>();
//builder.RegisterType<DataBaseManager>();和下面一行的结果相同 builder.Register(c=>new DataBaseManager(c.Resolve<IDataBase>())); using(var container=builder.Build()) { var manager=container.Resolve<DataBaseManager>(); manager.Select("Select * from database"); } Console.ReadKey(); }

 

 

posted on 2013-10-31 16:50  staben  阅读(401)  评论(0编辑  收藏  举报

导航