public void EnableModule(string moduleName) { if (!PluginsLoadContexts.Any(moduleName)) { CollectibleAssemblyLoadContext context = new CollectibleAssemblyLoadContext(moduleName); string filePath = $"{AppDomain.CurrentDomain.BaseDirectory}Modules\\{moduleName}\\{moduleName}.dll"; string referenceFolderPath = $"{AppDomain.CurrentDomain.BaseDirectory}Modules\\{moduleName}"; using (FileStream fs = new FileStream(filePath, FileMode.Open)) { System.Reflection.Assembly assembly = context.LoadFromStream(fs); _referenceLoader.LoadStreamsIntoContext(context, referenceFolderPath, assembly); MystiqueAssemblyPart controllerAssemblyPart = new MystiqueAssemblyPart(assembly); AdditionalReferencePathHolder.AdditionalReferencePaths.Add(filePath); _partManager.ApplicationParts.Add(controllerAssemblyPart); PluginsLoadContexts.Add(moduleName, context); } } else { CollectibleAssemblyLoadContext context = PluginsLoadContexts.Get(moduleName); MystiqueAssemblyPart controllerAssemblyPart = new MystiqueAssemblyPart(context.Assemblies.First()); _partManager.ApplicationParts.Add(controllerAssemblyPart); } ResetControllActions(); }
public void EnableModule(string moduleName) { if (!PluginsLoadContexts.Any(moduleName)) { var context = new CollectibleAssemblyLoadContext(); var filePath = $"{AppDomain.CurrentDomain.BaseDirectory}Modules\\{moduleName}\\{moduleName}.dll"; var referenceFolderPath = $"{AppDomain.CurrentDomain.BaseDirectory}Modules\\{moduleName}"; using (var fs = new FileStream(filePath, FileMode.Open)) { var assembly = context.LoadFromStream(fs); DefaultReferenceLoader loader = new DefaultReferenceLoader(referenceFolderPath, $"{moduleName}.dll"); loader.LoadStreamsIntoContext(context); var controllerAssemblyPart = new MystiqueAssemblyPart(assembly); AdditionalReferencePathHolder.AdditionalReferencePaths.Add(filePath); _partManager.ApplicationParts.Add(controllerAssemblyPart); PluginsLoadContexts.AddPluginContext(moduleName, context); } } else { var context = PluginsLoadContexts.GetContext(moduleName); var controllerAssemblyPart = new MystiqueAssemblyPart(context.Assemblies.First()); _partManager.ApplicationParts.Add(controllerAssemblyPart); } ResetControllActions(); }
public void EnableModule(string moduleName) { if (!PluginsLoadContexts.Any(moduleName)) { CollectibleAssemblyLoadContext context = new CollectibleAssemblyLoadContext(moduleName); var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Modules", moduleName, $"{moduleName}.dll"); var viewFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Modules", moduleName, $"{moduleName}.Views.dll"); var referenceFolderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Modules", moduleName); using (FileStream fs = new FileStream(filePath, FileMode.Open)) { var assembly = context.LoadFromStream(fs); _referenceLoader.LoadStreamsIntoContext(context, referenceFolderPath, assembly); context.SetEntryPoint(assembly); var controllerAssemblyPart = new MystiqueAssemblyPart(assembly); AdditionalReferencePathHolder.AdditionalReferencePaths.Add(filePath); _partManager.ApplicationParts.Add(controllerAssemblyPart); PluginsLoadContexts.Add(moduleName, context); context.Enable(); } using (FileStream fsView = new FileStream(viewFilePath, FileMode.Open)) { var viewAssembly = context.LoadFromStream(fsView); _referenceLoader.LoadStreamsIntoContext(context, referenceFolderPath, viewAssembly); var moduleView = new MystiqueRazorAssemblyPart(viewAssembly, moduleName); _partManager.ApplicationParts.Add(moduleView); } } else { var context = PluginsLoadContexts.Get(moduleName); var controllerAssemblyPart = new MystiqueAssemblyPart(context.Assemblies.First()); _partManager.ApplicationParts.Add(controllerAssemblyPart); context.Enable(); } ResetControllActions(); }