C#反射路径的问题啊

来源:百度知道 编辑:UC知道 时间:2024/06/21 14:52:46
我的解决方案是这样子的
WebApp --下面放的是网站
DAL --数据层
BLL --逻辑层
Model --实体层

BLL和DAL都引用了Model,现在我想在Model层中引用BLL或者DAL都引用不了了,所以我想到了用反射来调用BLL中的方法,但是我遇到了一个问题,就是反射的时候Assembly.LoadFile(这里面放的是绝对路径),我想放相对路径怎么办呀,就是不管我把网站以后迁移到哪,都不需要更改这里的路径,我想在MODEL层中调用BLL层中的一个方法,这里面的Assembly.LoadFile()中的路径我想写网站的相对路径,但是测试不行啊,我想写Assembly.LoadFile("Bin/BLL.DLL"),但是不行啊,有没有一种方法用相对路径能解决的呀,高手请指教啊
还是不行呀,错误提示:未能加载文件或程序集“BLL.RegionService”或它的某一个依赖项。系统找不到指定的文件。
其实我是想在MODEL层中加载网站目录BIN/BLL.DLL文件的

这是代码示例:
public class DataAccess
{

private static readonly string path = ConfigurationManager.AppSettings["WebDAL"];

private DataAccess() { }

public static IRoomType CreateRoomType()
{
string className = path + ".RoomType";
return (IRoomType)Assembly.Load(path).CreateInstance(className);
}

注意:必须要在app.config文件中配置,如下一行即可:
<appSettings>
<add key="WebDAL" value="SQLServerDAL"/>
</appSettings>

新建一个IBLL工程,把你的BLL的所有公开的方法签名都定义到接口下,这样可以使BLL里面的类实现这个接口,然后让Model引用定义接口的工程就可以了,如果你的程序集都在bin下面,那直接调用Assembly.Load把程序集名称传进去就行了。然后调用assembly.CreateInstance把完整的限制名传进去来创建指定对象,并把得到的object强转为接口类型。

使用Server.MapPath把相对路径转换成绝对路径应该可以吧

2个动态库相互调用,这样设计本身就有问题,也许你会在实例化的时候陷入死循环,最后内存溢出,这种情况我遇到过。

试试用LoadFrom,不要LoadFile