我在自己写东西时,用到了利用反射的抽象工厂模式:
代码如下:
1.工厂类:
namespace MyQQ.QQDALFactory
{
public class DataAccess
{
private static readonly string _path = "MyQQ.SQLServerDAL"L;//通过服务器端配置文件获取具体数据库操作程序集
public static IQQUser CreateUser()
{
string className = _path + ".User";
IQQUser user = (IQQUser)Assembly.Load(_path).CreateInstance(className);
return user;
}
}
}
2.具体数据库操作类:
namespace MyQQ.SQLServerDAL
{
public class User : IQQUser
{
}
}
3.在业务类中
namespace MyQQ.BLL
{
public class User
{
private IQQUser dal = MyQQ.QQDALFactory.DataAccess.CreateUser(); //此处无法通过反射实例化MyQQ.SQLServerDAL.User对象
public void Insert(QQUserInfo user)
{
dal.Insert(user);
}
}
}
注:具体数据库操作类的Dll跟工厂类的Dll还有业务类所在DLL都在同一目录内,但是就是反射不出来数据库操作类的实例,不解??
1.你的应用程序的bin目录下一定要有被反射的dll
2.你可以试试这种反射方案
Activator.CreateInstance(Type.GetType(string.Format("EZG.Data.{0}.{1}, EZG.Data.{0}", BaseConfigs.DbType, key), false, true));
.代码确实好像没什么问题,你先确定一下你在启动项目中是否引用了数据操作层的dll。
你可以跟踪调试一下..确定一下,没有对象是在什么都放出现的。
以上应该会生成QQDALFactory.bll和SQLServerDAL.bll。你在MyQQ.BLL层中引用下QQDALFactory.bll试试。
跟踪一下,看看是不是没有执行public static IQQUser CreateUser() 就出错了,那么就是没有引用QQDALFactory.bll,如果引用的把,之前引用的删除,重新引用。