C# 动态加载程序集,如何指定抽象?

C# 动态加载程序集,如何指定抽象?,c#,reflection,dll,appdomain,C#,Reflection,Dll,Appdomain,假设我在不同的dll中有3个抽象级别,组成我的应用程序 原始的 基本实现原语 Foo实现了Basic 我的应用程序动态加载Foo(Assembly.load,Activator…),默认情况下称为CurrentDomain_AssemblyResolve事件,因为他找不到基本类实现,所以我可以输入加载基本类的正确路径 根据我的业务运营情况,我的应用程序必须在100%的时间内处于活动状态。 但我可能会改变Foo的实现(无论是通过bug修复还是更改功能) 所以,我要做的是更改dll的路径(配置)

假设我在不同的dll中有3个抽象级别,组成我的应用程序

  • 原始的
  • 基本实现原语
  • Foo实现了Basic
我的应用程序动态加载Foo(Assembly.load,Activator…),默认情况下称为CurrentDomain_AssemblyResolve事件,因为他找不到基本类实现,所以我可以输入加载基本类的正确路径

根据我的业务运营情况,我的应用程序必须在100%的时间内处于活动状态。 但我可能会改变Foo的实现(无论是通过bug修复还是更改功能) 所以,我要做的是更改dll的路径(配置),下次使用这个函数调用“另一个”Foo时

它工作得很好,但是如果我需要再次加载另一个基本类(在本例中,我将重新编译Basic和Foo),我必须重新启动应用程序,有一种方法可以指示在实例化新的Foo时使用了哪个抽象


我知道程序集永远不会被释放(旧版本),但这对我来说不是问题。

为每个“版本”创建一个进程并通过MMF进行通信-通过这种方式,您可以并行激活不同的版本,并获得额外的好处,即在不再使用特定版本时能够关闭该版本…这似乎是一种艰难的策略。有人控制着一切,这是停止和启动,运行和返回信息,并发和其他问题。当我可以访问不同的对象时,这很简单,这将是一个更大的体系结构,用于管理所有此类通信,并且每个通信都在一个单独的流程中。@J.Lennon您正在讨论更改Foo的实现,然后在下一段中讨论加载另一个基本类。它们是一样的吗?你的意思是实施基本的计划吗?你想要实现的目标是模糊的。需要更多的信息。您是否正在实现脚本引擎(现场编译)?您希望如何恢复到另一个简单的Basic?是否使用强命名程序集?您是否创建任何AppDomains(标记)?多个基本的IMPL可以共存吗?