问题
在一个组件架构的应用程序中,程序启动时出现了一个错误。错误提示如下:
// List 1
=== 预绑定状态信息 ===
日志: DisplayName = SimpleComponent, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
日志: Appbase = file:///D:/thirdparty/ThirdPartyApp/ThirdPartyApp/bin/Debug/
日志: 初始 PrivatePath = NULL
调用程序集: (Unknown)。
===
日志: 此绑定从 default 加载上下文开始。
日志: 正在使用应用程序配置文件: D:\thirdparty\ThirdPartyApp\ThirdPartyApp\bin\Debug\ThirdPartyServicePlatformApp.exe.Config
日志: 使用主机配置文件:
日志: 使用 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 的计算机配置文件。
日志: 此时没有为引用应用策略(私有、自定义、分部或基于位置的程序集绑定)。
日志: 相同的绑定已出现过,因 hr = 0x80070002 而失败。
问题根源
这个应用是组件架构的应用,需要将开发的组件放到应用下的相应的Components目录;而且在框架代码中,在引用设置中,添加了SimpleComponent库的引用,
而且使用了类型硬编码创建对象。
// List 2
// ... ...
SimpleComponent component = new SimpleComponent();
// ... ...
这里2个问题:
1. 执行文件的当前目录下,并没有SimpleComponent库文件,所以找不到该文件。执行时会出错,如上面的异常情况。
2. 作为组件类框架,不能硬依赖,不需要再引用中添加该库。
3. 硬编码产生了硬依赖。不应该硬编码来创建对象。如List 2
中的代码,硬编码导致硬依赖了。
解决
去除硬依赖,已经硬编码。如DP中的要求,针对接口编程, 而不是针对实现编程。