Файлы ServiceStack Razor в отдельном проекте

У меня есть решение, состоящее из серверной части ServiceStack с обычной настройкой (AppHost, ServiceInterface и ServiceModel), а также приложения winforms и приложения iOS, использующего службы.

Теперь я хотел бы сделать веб-администратора и ищу советы о том, как это структурировать. Я бы хотел, чтобы проект apphost был небольшим, как говорят в SS документациях.

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

Поэтому я бы хотел, чтобы веб-администратор был в отдельном проекте, со всеми.cshtml и контентом, и всем этим.

Это возможно? Не рекомендуется? Есть идеи?

Некоторые альтернативы, о которых я могу думать,

  • одностраничное приложение, пусть несколько cshtml файлы живут в AppHost-проекте. Стоит ли это кривой обучения?
  • есть отдельный проект, вызовите веб-сервисы. Разве это не было бы очень неэффективно, учитывая, что они живут на одном веб-сервере? Или это следует считать преимуществом, поскольку оно делает все слабо связанными?

2 ответа

Посмотрите документы по использованию Compiled Razor Views и репозиторий ServiceStack.Gap GitHub о том, как создавать встроенные решения ServiceStack, использующие Compiled Razor Views.

Я хотел бы предоставить более полный ответ для начинающих:

  1. В проекте для сайта должна быть включена бритва. Он должен иметь ссылку на ServiceStack.Razor например, так .cshtml скомпилирует.

  2. Как указано @mythz, добавьте ServiceStack.Razor.BuildTask предварительно скомпилировать файлы бритвы. Это необходимо, чтобы включить их LoadFromAssemblies параметр

  3. В главном AppHost укажите, что файлы Razor находятся в другой сборке с LoadFromAssemblies например:

        this.Plugins.Add(new RazorFormat { LoadFromAssemblies = { typeof(ActivityServer.Admin.AdminServices).Assembly } });
    
  4. До сих пор это было все о файлах Razor .cshtml. Чтобы также включить службы, например, для более сложных представлений, просто добавьте это к AppHost() : base(...)или если вы хотите использовать префикс для этих служб, используйте AppHost.RegisterService.

Следует отметить, что во внешней DLL нет отдельного пространства имен для файлов Razor, поэтому "hello.cshtml" во внешней DLL конфликтует с файлом с тем же именем в главном AppHost. Поместив все файлы cshtml (во внешнюю DLL) в подпапку, это поможет, потому что папка будет частью URL.

Другие вопросы по тегам