Загрузка библиотек классов Razor в виде плагинов - PullRequest
0 голосов
/ 08 июня 2018

При использовании Razor Class Libraries с ASP.net core 2.1, если я добавляю ссылку на библиотеку классов, она загружает контроллеры и просматривает, как и ожидалось.Но вопрос в том, как я могу динамически загружать эти модули во время выполнения?Я хочу поместить модули в каталог, на которые нет ссылок во время разработки, и загрузить их при запуске приложения.Я пытался использовать части приложения.Но при этом контроллеры загружаются, а представления не обнаруживаются.

1 Ответ

0 голосов
/ 08 июня 2018

Я полностью забыл о CompiledRazorAssemblyPart.

Что нам нужно сделать, это:

services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.ConfigureApplicationPartManager(ConfigureApplicationParts);

и настроить такие детали, как эта

    private void ConfigureApplicationParts(ApplicationPartManager apm)
    {
        var rootPath = HostingEnvironment.ContentRootPath;
        var pluginsPath = Path.Combine(rootPath, "Plugins");

        var assemblyFiles = Directory.GetFiles(pluginsPath, "*.dll", SearchOption.AllDirectories);
        foreach (var assemblyFile in assemblyFiles)
        {
            try
            {
                var assembly = Assembly.LoadFile(assemblyFile);
                if (assemblyFile.EndsWith(".Views.dll"))
                    apm.ApplicationParts.Add(new CompiledRazorAssemblyPart(assembly));
                else
                    apm.ApplicationParts.Add(new AssemblyPart(assembly));
            }
            catch (Exception e) { }
        }
    }
...