Autofac的高级使用——Autofac.2.6.3.862

Autofac的高级使用——Autofac.2.6.3.862

 

1. 使用代码方式进行组件注册【依赖服务类和组件类】

  1. /// <summary>  
  2.     /// 管理类  
  3.     /// </summary>  
  4.     public partial class Mgr  
  5.     {  
  6.         private static IContainer container = null;  
  7.   
  8.         /// <summary>  
  9.         /// 自定义容器和组件注册  
  10.         /// </summary>  
  11.         /// <returns></returns>  
  12.         public static IContainer GetContainer()  
  13.         {  
  14.   
  15.             if (container == null)  
  16.             {  
  17.                 var builder = new ContainerBuilder();  
  18.                 //builder.RegisterType<SqlDatabase>().As<IDatabase>();  
  19.                 builder.RegisterType<SqlDatabase>().Named<IDatabase>("AutofacDemo.Lib.Sql.SqlDatabase");  
  20.                 builder.RegisterType<OracleDatabase>().Named<IDatabase>("AutofacDemo.Lib.Oracle.OracleDatabase");  
  21.   
  22.                 container = builder.Build();  
  23.   
  24.             }  
  25.             return container;  
  26.         }  
  27.     }  
/// <summary>
    /// 管理类
    /// </summary>
    public partial class Mgr
    {
        private static IContainer container = null;

        /// <summary>
        /// 自定义容器和组件注册
        /// </summary>
        /// <returns></returns>
        public static IContainer GetContainer()
        {

            if (container == null)
            {
                var builder = new ContainerBuilder();
                //builder.RegisterType<SqlDatabase>().As<IDatabase>();
                builder.RegisterType<SqlDatabase>().Named<IDatabase>("AutofacDemo.Lib.Sql.SqlDatabase");
                builder.RegisterType<OracleDatabase>().Named<IDatabase>("AutofacDemo.Lib.Oracle.OracleDatabase");

                container = builder.Build();

            }
            return container;
        }
    }


 

2. 使用配置文件进行组件注册【不需要依赖】


2.1. 定义配置文件

 

  1. <?xml version="1.0"?>  
  2. <configuration>  
  3.   <configSections>  
  4.     <section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/>  
  5.   </configSections>  
  6.   <autofac>  
  7.     <components>  
  8.       <component name="AutofacDemo.Lib.Oracle.OracleDatabase" type="AutofacDemo.Lib.Oracle.OracleDatabase, AutofacDemo.Lib.Oracle" service="AutofacDemo.Lib.IDatabase, AutofacDemo.Lib"/>  
  9.       <component name="AutofacDemo.Lib.Sql.SqlDatabase" type="AutofacDemo.Lib.Sql.SqlDatabase, AutofacDemo.Lib.Sql" service="AutofacDemo.Lib.IDatabase, AutofacDemo.Lib"/>  
  10.     </components>  
  11.   </autofac>  
  12. <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>  
<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/>
  </configSections>
  <autofac>
    <components>
      <component name="AutofacDemo.Lib.Oracle.OracleDatabase" type="AutofacDemo.Lib.Oracle.OracleDatabase, AutofacDemo.Lib.Oracle" service="AutofacDemo.Lib.IDatabase, AutofacDemo.Lib"/>
      <component name="AutofacDemo.Lib.Sql.SqlDatabase" type="AutofacDemo.Lib.Sql.SqlDatabase, AutofacDemo.Lib.Sql" service="AutofacDemo.Lib.IDatabase, AutofacDemo.Lib"/>
    </components>
  </autofac>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>


2.2. 读取config配置文件进行组件注册

 

  1. /// <summary>  
  2. /// 根据配置文件里的服务名生成对象  
  3. /// </summary>  
  4. public static void GetFrom_Config()  
  5. {  
  6.   
  7.   
  8.     var builder = new ContainerBuilder();  
  9.   
  10.     //从.config配置文件中取得相关的组件注册  
  11.     builder.RegisterModule(new ConfigurationSettingsReader("autofac"));   
  12.   
  13.      
  14.   
  15.     using (var container = builder.Build())  
  16.     {  
  17.         string vServiceName = "AutofacDemo.Lib.Oracle.OracleDatabase";//服务名  
  18.         //vServiceName = "AutofacDemo.Lib.Sql.SqlDatabase";  
  19.   
  20.         //是否存在服务名  
  21.         if (container != null)  
  22.         {  
  23.             if (container.IsRegisteredWithName(vServiceName, typeof(IDatabase)))  
  24.             {  
  25.                 IDatabase db = container.ResolveNamed<IDatabase>(vServiceName);  
  26.                 if (db != null)  
  27.                 {  
  28.                     db.Select("..........");  
  29.                 }  
  30.             }  
  31.         }  
  32.     }  
  33. }  
        /// <summary>
        /// 根据配置文件里的服务名生成对象
        /// </summary>
        public static void GetFrom_Config()
        {


            var builder = new ContainerBuilder();

            //从.config配置文件中取得相关的组件注册
            builder.RegisterModule(new ConfigurationSettingsReader("autofac")); 

           

            using (var container = builder.Build())
            {
                string vServiceName = "AutofacDemo.Lib.Oracle.OracleDatabase";//服务名
                //vServiceName = "AutofacDemo.Lib.Sql.SqlDatabase";

                //是否存在服务名
                if (container != null)
                {
                    if (container.IsRegisteredWithName(vServiceName, typeof(IDatabase)))
                    {
                        IDatabase db = container.ResolveNamed<IDatabase>(vServiceName);
                        if (db != null)
                        {
                            db.Select("..........");
                        }
                    }
                }
            }
        }


 

2.3. 是否存在服务名,存在,则根据服务名取得对象

  1. //是否存在服务名  
  2. if (container.IsRegisteredWithName(vServiceName, typeof(IDatabase)))  
  3. {  
  4.     IDatabase db = container.ResolveNamed<IDatabase>(vServiceName);  
  5.     if (db != null)  
  6.     {  
  7.         db.Select("..........");  
  8.     }  
  9. }  
                //是否存在服务名
                if (container.IsRegisteredWithName(vServiceName, typeof(IDatabase)))
                {
                    IDatabase db = container.ResolveNamed<IDatabase>(vServiceName);
                    if (db != null)
                    {
                        db.Select("..........");
                    }
                }

 

 

3. Demo下载

 点此下载

 

 

4. 使用代码方式进行组件注册【不需要依赖】【类似反射的全字符串形式】

  1. /// <summary>  
  2.         /// 自定义容器和通过反射进行组件注册  
  3.         /// </summary>  
  4.         /// <returns></returns>  
  5.         public static IContainer GetContainer()  
  6.         {  
  7.   
  8.             if (container == null)  
  9.             {  
  10.                 var builder = new ContainerBuilder();  
  11.   
  12.   
  13.                 Type objType = Type.GetType("AutofacDemo.Lib.IDatabase, AutofacDemo.Lib");  
  14.                 Type objTypeA = Type.GetType("AutofacDemo.Lib.Oracle.OracleDatabase, AutofacDemo.Lib.Oracle");  
  15.                 Type objTypeB = Type.GetType("AutofacDemo.Lib.Sql.SqlDatabase, AutofacDemo.Lib.Sql");  
  16.   
  17.   
  18.                 builder.RegisterType(objTypeA).Named("AutofacDemo.Lib.Oracle.OracleDatabase", objType);  
  19.                 builder.RegisterType(objTypeB).Named("AutofacDemo.Lib.Sql.SqlDatabase", objType);  
  20.   
  21.   
  22.                 ////需要知道接口  
  23.                 //builder.RegisterType(objTypeA).Named<objType>("AutofacDemo.Lib.Sql.SqlDatabase");  
  24.                 //builder.RegisterType(objTypeB).Named<objType>("AutofacDemo.Lib.Oracle.OracleDatabase");  
  25.   
  26.                 container = builder.Build();  
  27.   
  28.             }  
  29.             return container;  
  30.         }  
/// <summary>
        /// 自定义容器和通过反射进行组件注册
        /// </summary>
        /// <returns></returns>
        public static IContainer GetContainer()
        {

            if (container == null)
            {
                var builder = new ContainerBuilder();


                Type objType = Type.GetType("AutofacDemo.Lib.IDatabase, AutofacDemo.Lib");
                Type objTypeA = Type.GetType("AutofacDemo.Lib.Oracle.OracleDatabase, AutofacDemo.Lib.Oracle");
                Type objTypeB = Type.GetType("AutofacDemo.Lib.Sql.SqlDatabase, AutofacDemo.Lib.Sql");


                builder.RegisterType(objTypeA).Named("AutofacDemo.Lib.Oracle.OracleDatabase", objType);
                builder.RegisterType(objTypeB).Named("AutofacDemo.Lib.Sql.SqlDatabase", objType);


                ////需要知道接口
                //builder.RegisterType(objTypeA).Named<objType>("AutofacDemo.Lib.Sql.SqlDatabase");
                //builder.RegisterType(objTypeB).Named<objType>("AutofacDemo.Lib.Oracle.OracleDatabase");

                container = builder.Build();

            }
            return container;
        }


 

download

posted @ 2013-12-19 13:55  亲福  阅读(578)  评论(0编辑  收藏  举报