Файлы 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.
Я хотел бы предоставить более полный ответ для начинающих:
В проекте для сайта должна быть включена бритва. Он должен иметь ссылку на
ServiceStack.Razor
например, так.cshtml
скомпилирует.Как указано @mythz, добавьте
ServiceStack.Razor.BuildTask
предварительно скомпилировать файлы бритвы. Это необходимо, чтобы включить ихLoadFromAssemblies
параметрВ главном AppHost укажите, что файлы Razor находятся в другой сборке с
LoadFromAssemblies
например:this.Plugins.Add(new RazorFormat { LoadFromAssemblies = { typeof(ActivityServer.Admin.AdminServices).Assembly } });
До сих пор это было все о файлах Razor .cshtml. Чтобы также включить службы, например, для более сложных представлений, просто добавьте это к
AppHost() : base(...)
или если вы хотите использовать префикс для этих служб, используйте AppHost.RegisterService.
Следует отметить, что во внешней DLL нет отдельного пространства имен для файлов Razor, поэтому "hello.cshtml" во внешней DLL конфликтует с файлом с тем же именем в главном AppHost. Поместив все файлы cshtml (во внешнюю DLL) в подпапку, это поможет, потому что папка будет частью URL.