我有一个 Windows 服务,它查看 dll 列表(在设置文件中),将它们全部加载,并在每个 dll 中在其自己的线程中启动特定方法。这些 dll 中的每一个都必须从特定类(模块类)继承才能被此服务使用,并且该类的一部分是 MPI 对象,基本上是一个类的实例,它允许 dll 方法调用方法以直接与之交互服务。它是如何进行的:
- 服务加载 dll
- 使用反射检查是否有继承Module类的类
- 创建该 Module 继承类的新实例
- 创建 MPI 类的新实例。这有关于哪个模块正在使用它的识别信息
- 将新创建的 MPI 对象分配给新的 Module 类
- 启动主模块线程
基模块类本身就是它自己的 dll(以便服务和外部 dll 都可以使用它)。我想要做的是让服务能够为新的 Module 类分配一个具有特殊值的 MPI 对象,但我不希望该类能够更改 MPI 对象分配或任何值在里面。ReadOnly 用于继承的类,但可从其他类分配。我想我不能按照我的设置方式来做到这一点,我必须做些什么改变才能做到这一点。甚至可能吗?
MPI 几乎就像主要托管服务的 API。它处理一些集中的事情,比如错误记录。当服务加载一个新模块时,它会为其分配一个 ID。当该模块调用时MPI.ErrorLog(someStuff)
,具有对主服务内存的引用并因此可以访问实际错误写入器的 MPI 将写入此时模块 ID # 有此错误。我希望 ID 对继承 Module 的类是私有的,而不是对主服务私有,以便 ID 可以由它设置。不要用设置所有内容的构造函数说私有变量,因为我不希望模块本身能够创建新的 MPI 对象并能够改变这些东西。