最近在学习别人写的代码,确经常看到Assembly.Load()方法,不知是何意,查询了徽软MSDN,他的解释是加载程序集,对此解释不太理解,望高手解答!
现贴出部分代码:
//web.config
.
..
<appSettings>
<add key="WebDAL" value="TopTechOnLine.SQLServerDAL"/>
</appSettings>
.
.
.
//DataAccess.cs
public sealed class DataAccess
    {
        private static readonly string path = System.Configuration.ConfigurationManager.AppSettings["WebDAL"];
        private DataAccess()
        {}
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
          public static IAccount CreateAccount()
        {
            string className = path + ".Account";
            return (IAccount)Assembly.Load(path).CreateInstance(className);
        }
}.
.
.
public partial interface IAccount
    {
        void SetAccountInfo(AccountInfo accountInfo);
        AccountInfo GetAccountById(Guid id);
    }
...

解决方案 »

  1.   

    Assembly.Load(path).CreateInstance(className);加载程序集到当前应用程序域,appdomain,然后创建这个程序集中的类的实例。在编译时无法引用程序集才使用 Load。这是动态加载和反射,我从来没有用过。在 msdn 可以找到详细的解释。
      

  2.   

    楼上说的不太明白,我也看了MSDN,
    对程序集,应用程序域,的概念比较疑惑,望哪位大虾解答一下!分不够可以再加!
      

  3.   

    建议先看下《.NET 框架程序设计》
      

  4.   

    反射,代码即为
    (IAccount)Assembly.Load("TopTechOnLine.SQLServerDAL").CreateInstance("TopTechOnLine.SQLServerDAL.Account");
    先加载名为TopTechOnLine.SQLServerDAL.dll的程序集,然后创建该程序集下TopTechOnLine.SQLServerDAL.Account的类,然后再强制转换成IAccount
    经常在需要动态加载某个程序集的时候这样使用,PetShop就是用的这种方式。
    这样一来,只需要修改配置文件,将WebDAL的值改为TopTechOnLine.OracleDAL,即可加载TopTechOnLine.OracleDAL程序集,就不需要修改任何代码了。