zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    javaIO流--Writer,Reader
    javaIO操作之字节输入流--InputStream
    javaIO操作之字节输出流--OutputStream
    java中IO操作
    java中的方法引用
    java中lamda表达式的应用
    java8接口定义增强
    java中的强大的枚举(基本没人用)
    java中的泛型
    详述 IntelliJ IDEA 远程调试 Tomcat 的方法
  • 原文地址:https://www.cnblogs.com/kissfu/p/3482069.html
Copyright © 2011-2022 走看看