使用类型初始化,并发访问和反射创建具有“插件注册表”的迷你可插入架构

时间:2012-05-25 23:16:38

标签: c# asp.net-mvc c#-4.0 .net-4.0

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

  1. 反映装配中的类并找到它们中的任何一个 继承自Plugin基类。
  2. 生成一个新的“ModulePlugin”对象,该对象存储类名中的名称并获取对派生类型的引用,并可能从属性中获取某些元信息,如“插件类型”。
  3. 上面的插件类型将根据请求创建派生类型的新实例,但在上面的“ModulePlugin”对象中将其作为插件基类返回。
  4. 将生成的插件存储在List
  5. 在第四步中,我使用静态类“PluginRegistry”和静态类型初始化器,并将生成的数据结构(List< Plugin>)存储在静态只读IEnumerable<插件>

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

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

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

    1. 类型初始化程序/构造函数可以安全地使用 发生并发访问的时尚(ASP.NET)
    2. 所需的反射只会运行一次 给定应用程序池生命周期,更准确地说,不是一遍又一遍 对于每个请求,因为这是一个使用类型的静态类 初始化。
    3. 我有一个正常运作的原型,但我担心无法预料的问题。

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

0 个答案:

没有答案