Как правильно встраивать Wyam в основное решение MVC asp.net? - PullRequest
7 голосов
/ 24 мая 2019

Как правильно встраивать Wyam в ядро ​​MVC и asp.net?

Поскольку проекту требуется расширенная аутентификация, я встроил его в MVC. В настоящее время я внедряю его с контроллером MVC, читая сгенерированные html-файлы с помощью контроллера и визуализируя его через представление.

Файлы обслуживаются следующим образом

public IActionResult Index()
{
    return ServeMarkdownPage("index");
}

[Route("{pageName}")]
public IActionResult ServeMarkdownPage([FromRoute]string pageName)
{
     if (!System.IO.File.Exists($"HtmlOutput//{pageName}.html"))
     {
         return View("Error");
     }

     var content = System.IO.File.ReadAllText($"HtmlOutput//{pageName}.html");

     return View("MarkdownPage", new MarkdownPageViewModel { HtmlContent = content });
}

Представление просто выводит html-контент на страницу.

@Html.Raw(Model.HtmlContent)

Генерация уценки выполняется с созданием экземпляра движка и преобразованием его в html. В этом случае рецепт waym игнорируется.

var engine = new Wyam.Core.Execution.Engine();

engine.FileSystem.InputPaths.Add(new DirectoryPath("Markdown"));
engine.FileSystem.OutputPath = new DirectoryPath("HtmlOutput");

engine.Pipelines.Add(new Pipeline(
    "DocumentationPages",
    new ReadFiles("**/*.md"),
    new FrontMatter(new Yaml()),
    new Markdown(),
    new WriteFiles(".html")));

var docsRecipe = new Docs();

docsRecipe.Apply(engine);

Можно ли сделать это лучше? Правильно ли вызван рецепт?

1 Ответ

0 голосов
/ 28 мая 2019

По документам

https://wyam.io/docs/usage/embedding

Хотя Wyam обычно выполняется из приложения командной строки, это всего лишь тонкая оболочка вокруг базовой библиотеки, которую вы можете включить в свои собственные приложения. Базовая библиотека Wyam доступна на NuGet как Wyam.Core. После того, как вы включите его в свое приложение, вам нужно будет создать экземпляр класса Wyam.Core.Execution.Engine.

Для настройки движка вы используете свойства класса Engine.
...
...
Как только двигатель настроен, выполните его с вызовом Engine.Execute(). Это запустит оценку конвейеров, и любые выходные сообщения будут отправлены настроенным конечным точкам трассировки.

Так что в идеале, поскольку вы встраиваете его, вам придется вручную запустить процесс генерации.

Вы можете создать простого помощника для управления этим для вас.

public static class WyamConfiguration {
    public static void Embed(Action<Wyam.Core.Execution.Engine> configure) {
        // you will need to create an instance of the Wyam.Core.Execution.Engine class
        var engine = new Wyam.Core.Execution.Engine();
        // configure the engine
        configure(engine);
        // Once the engine is configured, execute it with a call to Engine.Execute()
        // This will start evaluation of the pipelines and any output messages will 
        // be sent to the configured trace endpoints.
        engine.Execute();
    }
}

И звоните по этому поводу с вашего Startup.cs

Например

WyamConfiguration.Embed(engine => {
    engine.FileSystem.InputPaths.Add(new DirectoryPath("Markdown"));
    engine.FileSystem.OutputPath = new DirectoryPath("HtmlOutput");

    engine.Pipelines.Add(new Pipeline(
        "DocumentationPages",
        new ReadFiles("**/*.md"),
        new FrontMatter(new Yaml()),
        new Markdown(),
        new WriteFiles(".html")));

    var docsRecipe = new Docs();

    docsRecipe.Apply(engine);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...