No, but now I update to alpha7 and it works well! :+1:
Dmitry Sikorsky
@DmitrySikorsky
Happy to hear this :) Yes, it was bug there, I've fixed it!
efams
@efams
Hi guys! Suppose i have many Extensions (ExtA, ExtB, ExtC ...). ExtA, ExtB and ExtC have for example a controller named "Search" that implement a method named "Start()" And then I have the MainApp that implement, like extensions, a controller named "Search" containing "Start()" method. Is possible to call from MainApp controller Search.Start() all Start() method from Extensions, elaborate the result and then return to the View? Suppose than all Extesions Search.Start() return the same type of data.
Hi! It sounds a bit strange that you want to call Start method of controllers directly, maybe it would be better to have some special class for that. But doesn't matter. You can use https://github.com/ExtCore/ExtCore/blob/master/src/ExtCore.Infrastructure/ExtensionManager.cs to get all implementations or instances of some specific type and then run the method. As I remember I have done something like this when have to return JSON with the results of different requests with one request.
efams
@efams
Yes, is better to implement function in other classes and not into the controller... Can you show me an example pleas? I'm trying to call in MainApp the method Start(string key) situated inside class Search in MainApp.ExtA.
a => a.FullName.ToLower().Contains("entityframework.sqlite") is just filter
you can skip it
Артём Баранов
@artemb89
Предлагаю в RepositoryBase реализовать методы CRUD операций, могу сегодня вечером этим заняться, если все согласны
Пронин Андрей
@KANekT
там же что-то такое уже реализовывалось или это в платформусе было
Артём Баранов
@artemb89
Вроде бы нет, в платформусе почти в каждом репозитории есть public Permission WithKey(int id) { return this.dbSet.FirstOrDefault(p => p.Id == id); }
public IEnumerable<Permission> All(){
returnthis.dbSet.OrderBy(p => p.Position);
}
и похожие куски
Пронин Андрей
@KANekT
на прошлой работе было что репозитарий это только CRUD
а все остальные запросы через services выполнялись
Артём Баранов
@artemb89
Почти то же самое, в репозитории CRUD, всё остальное в Bl. Т.к. методы чтения,создания, редактирования, удаления в основном одинаковые, хотелось бы добавить виртуальные методы в RepositoryBase, чтобы исключить дублирование кода
Пронин Андрей
@KANekT
да надо бы с возможностью overrride
Dmitry Sikorsky
@DmitrySikorsky
я обычно слой сервисов не использую, т.к. чаще всего это просто копирование функционала из репозитория (вот тут это обсуждали в комментах, и в присланном примере как раз так и было: https://habrahabr.ru/company/microsoft/blog/279985/#comment_8820367). если необходимо выполнять какие-то сложные манипуляции (типа создания пользователя со многими задействованными таблицами и так далее), я использую некие менеджеры или хелперы. идея с CRUD вроде бы хорошая, хотя смущает, что все репозитории получат эти возможности, даже если они не нужны. также, если у сущности составной первичный ключ, то как быть? предлагаю этот момент сначала обсудить
также там висит пул реквест, связанный с путем к каталогу с расширениями. мне кажется, надо вообще пересмотреть механизм формирования пути, т.к. для запаблишенного приложения получается вообще неправильный путь, т. к. там меняется структура проекта. наверное, нужно не от папки src путь писать, а от корня проекта. как считаете?
_
Артём Баранов
@artemb89
По поводу пути к каталогу расширений согласен. По поводу CRUD, можно написать дополнительный класс, если функционал требуется - наследуем. По поводу составных ключей нужно подумать.
Microsoft.AspNet.Identity не стали использовать в проекте ?
Dmitry Sikorsky
@DmitrySikorsky
SignOut смерджил
Identity использовать не стал, мне эта штука не нравится. Там в таблице пользователей прописаны левые поля, вроде номера телефона, электронной почты и кучи прочего лишнего. + оно работает только с EF.
тогда базовый класс для контекста необходимо было бы наследовать от их класса. короче, жестко весьма
так, давайте разберемся. вы какую версию используете? я проверяю так: беру семпл, копирую исходники платформуса в src, прописываю в сепле альфу из исходников и запускаю. так я вношу правки в сам платформус. у меня стили работают. у вас не работают именно в такой конфигурации, или в старом примере?
я хочу выложить новый пример когда исправлю ошибки в платформусе и выложу новую альфу. скорее всего на выходных.
но есть пара коментариев - ExtensionB имеет template: "extension-b" - это отличие от ExtensionA. без него не работало
Вы приводите public class Startup: ExtCore.WebApplication.Startup без public static void Main(string[] args) => WebApplication.Run<Startup>(args);
и вот непонятка - я меняю IndexA.cshtml - ну там заголовок например - рестарую приложение - изменения нет. Спустя наверное пол часа - появилось.
И то же самое с дебагом - breakpoint in ExtensionAController works always, but breakpoint in Index.cshtml is disbled very often... any suggestions?
itur
@itur
Found it: EnablePreCompilation(BeforeCompileContext context) => true; once I will remove this line I can debug and see changes...
Dmitry Sikorsky
@DmitrySikorsky
добрый день! насчет template: "extension-b": это ведь регистрация маршрута всего лишь. т. е. зарегистрировать любой урл по сути для своих экшнов. в extension-a стоит пустой маршрут, что означает всего лишь, что это главная страница. могу подробнее об этом рассказать, если нужно