2

我需要一些基本的“可插拔”架构,并且很好奇我对实现的假设和想法是否与我相信的一样。设置包含支持某些功能的所有类的“插件注册表”的基本过程如下:

  1. 反思程序集中的类并找到它们中的任何一个继承自插件基类。
  2. 生成一个新的“ModulePlugin”对象,该对象存储类名中的名称并获取对派生类型的引用,并可能从属性中获取一些元信息,例如“插件类型”。
  3. 上面的插件类型将根据请求创建派生类型的新实例,但在上面的“ModulePlugin”对象中将其作为插件基类返回。
  4. 将生成的插件存储在列表中

在第四步中,我使用带有静态类型初始化程序的静态类“PluginRegistry”执行此操作,并将生成的数据结构(List < Plugin>)存储在静态只读 IEnumerable<Plugin> 中。

在整个应用程序中,我以这种方式使用插件:

PluginRegistry.Plugins.Where(plugin => plugin.Type == Logger).Foo();

这是在 ASP.NET MVC 应用程序中。我假设:

  1. 在发生并发访问的情况下,类型初始化器/构造器可以安全地使用(ASP.NET)
  2. 对于给定的应用程序池生命周期,所需的反射只会运行一次,更准确地说,不会为每个请求一遍又一遍地运行,因为这是一个使用类型初始化的静态类。

我有一个可运行的原型,但我担心无法预料的问题。

我的假设是否正确,是否有任何我应该注意的问题?

4

0 回答 0