我有一个应用程序,其核心功能包含在 (C) DLL 中。此库的导出存在头文件。这个应用程序是非常单实例的。我的意思是,该库在内部使用了很多全局状态,因为它一次只能处理一个文件。应用程序与此库一起使用的正常工作流程是这样的:
在里面
打开数据库
使用数据库
关闭数据库
(重复)
我想围绕这个库提供的功能编写一个 .NET 对象模型。通过这个,我的意思是我希望“数据库”成为一个对象(调用它Database
),它具有归结为库调用的属性/方法。
我当然希望能够Database
在任何给定时间拥有多个对象。但是,可以将这个库的一个实例加载到我的进程中(我假设),然后我会受到库对全局变量的使用的限制。
我有哪些选择?
我考虑让我的顶级类Database
只能通过工厂方法访问,这会将实例的数量限制为Database
一个:
public class Database {
private Database() {
library_init();
// ...
}
private Database m_instance;
public static Database Open(string file) {
if (m_instance != null)
throw new InvalidOperationException("...");
return new Database();
}
public Close() {
library_close();
// ...
m_instance = null;
}
}
我还能做些什么,比如手动加载库AppDomain
或类似的东西?
我真的只预见一次需要一个实例,但不必忍受这种限制会很好。