我有一个处理作业的控制引擎。每个作业配置指定查找作业运行界面所需的程序集和类。此程序集可以是本地的,也可以位于另一台服务器上。
例如,我可以使用以下所有实现Run接口的文件
\ Server1的\ Assembly1.Class1 \ Server2上\ Folder1中\ Assembly2.Class2 \ Server3的\ FOLDER2 \ Folder3 \ Assembly3.Class3
我希望能够配置三个作业,每个作业都引用它应该运行的相关路径和程序集名称。然后,控制引擎使用反射加载上面的指定程序集并运行Run()方法。
但是我遇到的困难是,如果我加载的程序集具有依赖项,则不会加载它们。例如,如果Assembly1依赖于Entity Framework并且控制引擎没有将其作为依赖项,则它将失败。实体框架当然会出现在与\ Server1 \ Assembly1.Class1相同的文件夹中,例如Class1依赖于它,因此它将其构建到该位置,但Control引擎只知道加载Class1而不是EF。
我需要一种方法来为每个作业指定哪些依赖程序集也需要加载,然后从与Run()接口程序集类相同的位置加载它们的最佳方法。
我已经看过AppDomain.AssemblyResolve,并考虑过使用自定义属性和反射,但我觉得我没有考虑到最好的设计,因为它感觉很乱。
有什么建议吗?