C# 创建一个小型可插拔体系结构;插件注册表";使用类型初始化、并发访问和反射

C# 创建一个小型可插拔体系结构;插件注册表";使用类型初始化、并发访问和反射,c#,asp.net-mvc,c#-4.0,.net-4.0,C#,Asp.net Mvc,C# 4.0,.net 4.0,我需要一些基本的“可插拔”架构,我很好奇我对实现的假设和想法是否和我所相信的一样。设置包含支持某些功能的所有类的“插件注册表”的基本过程如下: 反思程序集中的类并找到其中任何一个 从插件基类继承 生成一个新的“ModulePlugin”对象,该对象存储类名中的名称并获取对派生类型的引用,还可能从属性中获取一些元信息,如“插件类型” 上面的插件类型将根据请求创建派生类型的新实例,但会在上面的“ModulePlugin”对象中作为插件基类返回 将生成的插件存储在列表中 在第四步中,我使用一个带有静态

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

  • 反思程序集中的类并找到其中任何一个 从插件基类继承
  • 生成一个新的“ModulePlugin”对象,该对象存储类名中的名称并获取对派生类型的引用,还可能从属性中获取一些元信息,如“插件类型”
  • 上面的插件类型将根据请求创建派生类型的新实例,但会在上面的“ModulePlugin”对象中作为插件基类返回
  • 将生成的插件存储在列表中
  • 在第四步中,我使用一个带有静态类型初始值设定项的静态类“PluginRegistry”来完成这项工作,并将生成的数据结构(List)存储在一个静态只读IEnumerable

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

    PluginRegistry.Plugins.Where(plugin => plugin.Type == Logger).Foo();
    
    这在ASP.NET MVC应用程序中。 我假设:

  • 类型初始值设定项/构造函数在这种情况下使用是安全的 发生并发访问的方式(ASP.NET)
  • 所需的反射在一段时间内只运行一次 给定应用程序池生命周期,更准确地说,不是一次又一次 对于每个请求,因为这是一个使用类型的静态类 初始化
  • 我有一个运行的原型,但我担心无法预见的问题


    我的假设正确吗?还有什么我应该注意的地方吗?

    Programmers.SE可能是这类问题的更好论坛。乍一看,我看不出你的设计有任何突出的问题。创建自定义插件管理器作为一种练习可能很有趣,但除此之外,它只是重新发明了.MEF。对于这样的东西来说,这太过分了。我不想强迫新开发人员学习一个新的框架,因为同样的核心可以用30行或更少的目标支持类来完成。我也不确定MEF是否适合我所处环境的约束。有时,现有的车轮并不适合您现有的推车。这已经完成,而且不是一次。在mvvm和所有宣传之前。没什么问题。通常,轻量级DIY插件胜过所有的“模式”和“框架”。。。。。乔舒亚的问题是,当你知道自己在做什么,为什么做什么的时候,你就会这样做。如果你是这样问的,你可能不需要为程序员操心。SE可能是一个更好的论坛,适合这种类型的q。乍一看,我看不出你的设计有任何突出的问题。创建自定义插件管理器作为一种练习可能很有趣,但除此之外,它只是重新发明了.MEF。对于这样的东西来说,这太过分了。我不想强迫新开发人员学习一个新的框架,因为同样的核心可以用30行或更少的目标支持类来完成。我也不确定MEF是否适合我所处环境的约束。有时,现有的车轮并不适合您现有的推车。这已经完成,而且不是一次。在mvvm和所有宣传之前。没什么问题。通常,轻量级DIY插件胜过所有的“模式”和“框架”。。。。。乔舒亚的问题是,当你知道自己在做什么,为什么做什么的时候,你就会这样做。如果你这样问的话,你可能不需要麻烦