Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    Пронин Андрей
    @KANekT
    http://platformus.net - на этом фреймворке построен, интересная штука
    Dmitry Sikorsky
    @DmitrySikorsky
    @artemb89 Добрый день! Нет проблем, главное, что мы друг друга понимаем :) Да, вы правы, мне нужно обязательно этот момент документировать. Эта проверка в коде - попытка ограничить количество сборок, в которых производится поиск подходящих реализаций репозиториев (для повышения производительности).
    @artemb89 На счет CodeFirst. А если просто отнаследовать свой класс от StorageContext и переопределить метод OnModelCreating, вставив после вызова базового метода свой код? Либо можно добавить действительно нечто вроде колбека, чтобы можно было это делать без возни с наследованием, если это частый сценарий.
    Артём Баранов
    @artemb89
    @DmitrySikorsky Спасибо, надо будет попробовать сегодня вечером =). Сценарий был такой: есть два расширения, в каждом из них создаю модель(пока модели независимы друг от друга, но думаю в дальнейшем может получится так, что одно расширение зависит от другого), т.е. нужно знать момент когда построение модели во всех расширениях завершено.
    Dmitry Sikorsky
    @DmitrySikorsky
    Я понял. Я там отписал на гите в пулл-реквесте, кстати.
    Пронин Андрей
    @KANekT
    а почему табуляция такая странная в 2 пробелла ?
    Dmitry Sikorsky
    @DmitrySikorsky
    Сила привычки.
    Dmitry Sikorsky
    @DmitrySikorsky
    A have released ExtCore 1.0.0-alpha6! https://github.com/ExtCore/ExtCore/wiki/Roadmap
    Пронин Андрей
    @KANekT
    (party)
    Артём Баранов
    @artemb89
    Какие планы на следующую версию?
    Dmitry Sikorsky
    @DmitrySikorsky
    Сейчас я хочу перевести Платформус на новую версию ExtCore и исправить там обнаруженные ошибки. Пока я это делаю, определимся с планами на новую версию. Буду рад пожеланиям и предложениям.
    Артём Баранов
    @artemb89
    Пока единственное, что приходит в голову, думаю можно было бы добавить пару интерфейсов для случаев когда расширению при первом подключении нужно что-то сделать(установка), у что-то сделать в случае удаления. Например подключаем расширение, нужно создать новые таблицы в БД, а при удалении эти таблицы нужно удалить.
    efams
    @efams
    Hi @DmitrySikorsky , i tryied to replicate your sample without any success.
    I created the Web Application Project and the "ExtensionA", but i can't call the controller of "ExtensionA".
    I followed the Quick Start Step, compile without error, create the X.Y.dll executing "dnu build" and then copied the *.dll in "artifacts\bin\Extensions" folder, but nothing happens.
    Can you help me to understand where I'm wrong?
    I uploaded the project here: https://goo.gl/uA8xtA
    Thanks
    Dmitry Sikorsky
    @DmitrySikorsky
    Hi! Have you registered any routes?
    Артём Баранов
    @artemb89
    Если не ошибаюсь, то в конструкторе класса Startup нужно добавить this.configurationRoot = Configuration; и методе ConfigureServices(IServiceCollection services) нужно в начале base.ConfigureServices(services);
    efams
    @efams

    Hi! I left the default routes:

    applicationBuilder.UseMvc(routes =>
    {
    routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{id?}");
    });
    and in ExtensionA created a class public class ExtensionA : IExtension

    and then

    public void RegisterRoutes(IRouteBuilder routeBuilder)
    {
    routeBuilder.MapRoute(name: "Extension A", template: "extension-a", defaults: new { controller = "ExtensionA", action = "Index" });
    }

    Артём Баранов
    @artemb89

    @efams
    add "this.configurationRoot = Configuration; " in startup constructor and in method ConfigureServices(IServiceCollection services) add base.ConfigureServices(services);

    http://clip2net.com/s/3vJ4xE0

    efams
    @efams
    Yess!! Now ExtensionA work, but SpiderController won't work, showing this:
    InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNet.Routing.IRouteBuilder' while attempting to activate 'SpiderJIT.Controllers.SpiderController'.
    I'm trying to resolve, i think i have to register a route for SpiderController
    Артём Баранов
    @artemb89
    Strangely enough, I have worked http://clip2net.com/s/3vJhbRU
    efams
    @efams
    Ok now it work like a charm, without changing anything :smile:
    Thank you so much! @artemb89
    Артём Баранов
    @artemb89
    You are welcome! :smile:
    efams
    @efams
    A little problem, now i clean cache and browser doesn't load external file like .js and .css. How can I solve that?
    If I delete/comment this line everything css and js works well but no extension was loaded
    // ExtCore Implementation - Startup (...)
    this.configurationRoot = Configuration;
    // ExtCore Implementation - ConfigureServices(...)
    base.ConfigureServices(services);
    Dmitry Sikorsky
    @DmitrySikorsky
    Are you using alpha7?
    Can you access your files with browser?
    efams
    @efams
    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.
    I'm trying without success with:
    IEnumerable<System.Reflection.Assembly> outItem= ExtensionManager.Assemblies;
    object obj = Activator.CreateInstance(Type.GetType(........
    but nothing works :smile: i can't find a solution
    Dmitry Sikorsky
    @DmitrySikorsky
    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.
    TRepository repository = ExtensionManager.GetInstance<TRepository>(a => a.FullName.ToLower().Contains("entityframework.sqlite"));
    you can use GetInstances instead of GetInstance
    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()
    {
      return this.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 путь писать, а от корня проекта. как считаете?