这两天是在做重新做机房收费系统 ,利用反射+配置文件 是吸纳数据库访问程序 。
期间遇到了一个小问题,小问题却花了很大的时间才给弄好了,最终的问题确实一个很小的小细节。
下面看具体的一段代码
/去除IFactory ,SqlserverFactory, SqlserverFactory ,AccessFactory三个工厂类,取而代之的是DataAccess类 class DataAccess { //反射条件的写法 , 加入反射可以用例字符串来实例化对象 了 。而变量是可以更换的 private static readonly string AssemblyName = "反射";//程序集名称 private static readonly string db = ConfigurationManager.AppSettings["DB"];//数据库访问变量 //实例化 具体类 public static IUser CreateUser() { string className = AssemblyName + "." +db + "User";//命名空间+实例化类名 return (IUser)Assembly.Load(AssemblyName).CreateInstance(className); } public static IDepartment CreateDepartment() { string className = AssemblyName + "." + db + "Department"; return (IDepartment)Assembly.Load(AssemblyName).CreateInstance(className); } }
配置文件的代码
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <add key="DB " value="Sqlserver"/> </appSettings> </configuration>
然后就进行程序调试了 ,期间遇到的一个错误就是
之后再看 ClassName 的值 如下图
少了 db的值 ,哪里去了呢了,再回去看db
出现了db的值为空现象,为空就是没有传递过来,返回看配置文件 , 发现key =“DB”中,DB后面多了一个空格
<appSettings>
<add key="DB " value="Sqlserver"/>
小问题, 纠结了好久才解决到 。真是细节决定成败呀,一个空格就如此大的麻烦 了,如果不细心,那么后面的问题会更大呀。 所以 一定要心细, 细心才是。