最近在学习别人写的代码,确经常看到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);
}
...
现贴出部分代码:
//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);
}
...
对程序集,应用程序域,的概念比较疑惑,望哪位大虾解答一下!分不够可以再加!
(IAccount)Assembly.Load("TopTechOnLine.SQLServerDAL").CreateInstance("TopTechOnLine.SQLServerDAL.Account");
先加载名为TopTechOnLine.SQLServerDAL.dll的程序集,然后创建该程序集下TopTechOnLine.SQLServerDAL.Account的类,然后再强制转换成IAccount
经常在需要动态加载某个程序集的时候这样使用,PetShop就是用的这种方式。
这样一来,只需要修改配置文件,将WebDAL的值改为TopTechOnLine.OracleDAL,即可加载TopTechOnLine.OracleDAL程序集,就不需要修改任何代码了。