自己在使用抽象工厂+配置文件+反射实现重构机房的过程中,遇到了这种情况,
当初自己认真的检查了反射中的代码,都是没有问题,请教了师姐,检查了抽象工厂与反射的使用都没有问题
Private Shared ReadOnly AssemblyName As String = "DAL" '数据程序集名称
Private Shared ReadOnly db As String = System.Configuration.ConfigurationSettings.AppSettings("DB")
Public Function CreateUser() As [Interface].IUser
Dim ClassName As String = "DAL" + "." + db + "User"
Dim User As IUser '定义接口
'反射实例化()
User = CType(Assembly.Load(AssemblyName).CreateInstance(ClassName), IUser)
Return User
后来在网上找到了类似的问题的解决方案解决了,提示很明显是缺少DLL,原因:
1:DLL文件名与加载时的DLL文件名不一致。
2:.DLL文件根本不存在,即出现丢失情况。
3.:加载DLL路径错误,即DLL文件存在,但加载路径不正确
我查了自己项目的情况:
文件名一致,在UI层没有查找到生成的关于D层的Dll文件,程序运行的机制是在启动层的bin文件夹下的debug里面必须得有别的程序集生成的dll文件,程序在运行时会直接在启动的这一层里面直接的调用所需要的dll文件,后来自己把有关的D层生成的dll手动添加了进去,在运行,没有错误了;但是这样还是不行的毕竟后期还需要做大量的工作,总不能每次都需要手动吧,后来才知道原来可以调整程序的生成路径:
这样对于这个问题就解决掉了,学习到很多知识:
反射的一个原则:一切皆以UI层的bin文件夹中的dll名称为中心。(原因很简单:.net类加载的机制就是默认从本程序集的bin文件中找,所以bin文件夹中一定要有要加载的程序集的dll)。UI层中bin文件夹中dll叫什么名字AssemblyPath就使用什么名字,bin内部类的全名叫什么,className就写成什么全名。.net中的引用:加入对某个程序集的引用就能在程序集有变化时自动拷贝dll。
发现问题:自己搜索的时候还是有些偏差,今后多多锻炼。
总结:遇见问题是很正常的,是自己不断前进的阶梯,踏踏实实的解决问题才是最重要的
后期对反射的思考与学习:
虽然抽象工厂模式是为解决数据库更换而设计的,但操作不同数据库到底有些什么不同目前尚不十分清楚,除了链接字符串上有区别,还知道Sql Server和Access等在ADO.NET上的使用是不同的,Sql Server用的是System.Data.SqlClient命名空间下的SqlConnection、SqlCommand、SqlParameter、SqlDataAdapter、SqlDataReader等,而Accesss数据库则是用的System.Data.OleDb命名空间下相应的类。此外可能对不同数据库进行操作时SQL语句有些不同吧?!
对现在正在设计的机房收费系统,如果不同数据库之间的SQL语句没区别,那么现在所写的继承数据表处理接口的数据表处理类就不必在更换数据库时被替换。也就是反射的应用就没有必要了,因为反射在这的作用就是动态的产生数据库处理类(根据条件产生处理Sql Server或其他数据库的处理类,而这些数据库处理类用的就是SQL语句)。
对这个模式应用的整体感觉是试着应用上了模式来解决数据库更换带来的问题,但究竟解决了没有,解决彻底否尚有很大疑问……
分享到:
相关推荐
二是DALFactory中只需要一个DataAccess类就可以创建所有的程序集实例。三是项目创建后需要修改默认命名空间和程序集名称,以及调整解决方案中的项目依赖和项目引用。 此外,三层架构不仅体现在代码层面的分层,还...
4. 更新 web.config 文件,配置 SQLServerDAL(或其他 DAL)的程序集信息。 5. 编写 DALFactory,根据配置返回指定 DAL 类的实例。 6. 创建 BLL 类,通过 DALFactory 获取 DAL 实例,调用数据操作方法。 7. 创建 Web...
- `DALFactory`可能是一个DAL工厂类,它根据需求动态创建和返回特定的数据访问对象实例。这样,BLL无需直接实例化DAL,而是通过工厂获取,进一步降低了各层之间的耦合。 7. **程序集加载(Assembly Loading)** -...
简单工厂模式在三层架构中起到了一个基础的作用,它为创建特定的DAL实例提供了一种统一的方式,使得代码更加简洁,降低了复杂性。在.NET开发中,设计模式的应用能够帮助我们构建更健壮、更易于维护的系统。
提供的压缩包文件名称列表暗示了这是一个基于C#或.NET框架开发的网站应用程序,因为文件名中出现了如"obj"、"Debug"、"ResolveAssemblyReference.cache"等与.NET编译和依赖管理相关的目录和文件。 1. **项目结构**...
通过修改Web.config 的<add key="DAL" value="Maticsoft.SQLServerDAL" />实现加载不同的DAL程序集. OracleDAL SQLServerDAL 1. Model 2. IDAL 引用 Model 3. DALFactory 引用 IDAL 4. (OLeDB)DAL 引用 IDAL ...
在ASP.NET中,它可以通过反射机制加载指定的数据库访问程序集,并返回给BLL使用。`DALFactory`通常会读取`web.config`文件中的配置信息,如程序集名称,以便正确地实例化相应的数据访问类。 6. **模型(Model)**:...
在 Codematic 中,反射机制被用来动态加载和实例化指定的数据库访问程序集。通过读取web.config文件中的参数,DALFactory能够决定使用哪个数据库访问子层,例如SQLServerDAL或OracleDAL。这样,即使在应用程序运行时...
- 注意调整项目间的命名空间、程序集名称和项目依赖关系。 - 正确设置解决方案中的项目引用。 **分层架构的优势** - **专注性**:开发人员可以专注于某一特定层,提高开发效率。 - **可替换性**:各层的实现可以...
它通过读取web.config文件,获取数据库类型和相应的程序集信息,然后利用反射机制创建和返回对应数据库的DAL对象。这样,BLL无需直接引用具体的数据访问类,而是通过工厂来获取实例,提高了代码的灵活性和解耦度。 ...
直接引用表示一个程序集直接使用另一个程序集中的类型,而间接引用则是通过其他程序集间接使用。 3. **颜色编码** - **蓝色箭头**:表示程序间的引用关系。虚线代表间接引用,实线代表直接引用,展示了不同程序集...
利用反射机制,它可以加载程序集并实例化特定的DAL类,提供了一种灵活的依赖注入方式,便于更换或扩展数据访问策略。 实施三层架构的步骤通常包括: 1. **设计数据模型(Model)**:根据业务需求创建实体类,如...
【PetShop的整理】这篇文章主要介绍了PetShop 4.0的架构设计和实现步骤,这是一个经典的ASP.NET应用程序示例,展示了如何使用分层架构和工厂模式来处理数据访问。以下是详细的知识点: 1. **分层架构**: - **WEB...
系统基础代码应用了PetShop系统设计中的反射机制和抽象工厂方法模式,生成的基础类库包括Model对象实体类,封装操作数据库的类和函数的程序集DBUtility,数据访问层的接口程序集IDAL,访问SQL Server数据库,实现...
在【数据访问层】,PetShop使用了DAL接口程序集,例如DALIDAL、SQLServerDAL和OracleDAL,实现了对MS SQL Server和Oracle数据库的访问。通过IDAL接口,可以创建具体的数据库访问对象,如ICategory、IInventory、...
"DBUtility"、"Data"、"BLL"、"Model"、"chufaqitest"和"DALFactory"等文件夹或文件可能包含C#项目的不同组件,如数据库访问层(DAL)、业务逻辑层(BLL)、模型类和数据访问工厂,这些都是与数据库交互时常见的结构...
首先,三层架构是一种常见的软件设计模式,它将应用程序分为数据访问层(DAL)、业务逻辑层(BLL)和表示层(UI)。在这个解决方案中,IDAL(接口数据访问层)定义了对数据操作的基本接口,实现了抽象。SqlServerDAL...
3.4 完善系统对3个功能的导航 31 3.5 小结 31 第4章 投票模块 32 4.1 一个简单的投票系统 32 4.1.1 设计投票功能的数据存储方式 32 4.1.2 投票项目管理功能 33 4.1.3 投票功能 37 4.1.4 图形化显示...