Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    Klainer
    @Klainer
    Hi thanks for your awesome project! I have a question about sample project. How is created DB strucutre for ExtensionB you only map entity by modelbuilder, and creating must by done manualy ? Am I right ? Another question is: Is this concept adaptable for ASP.NET MVC 5 solutions ? Thanks!
    Dmitry Sikorsky
    @DmitrySikorsky
    @Klainer Hi! I'm happy that you liked it :smile: DB structure is created automatically (in case of SQLite; it is possible for MS SQL Server too but usually I don't use code first db autocreate features). It is possible to use the idea in "old" MVC. I have done it some time ago (before moving to the asp.net 5) with MEF.
    Maybe it would be better for you to take a look at much more simpler demo project: https://github.com/DmitrySikorsky/AspNet5ModularApp. I've used ideas from this my project in ExtCore.
    AnjunaMoon
    @AnjunaMoon
    Hello Dmitry. I know you said dll-loading isn't important, let me ask just for the sake of seeing if it is possible. The loading of dll:s in Extension-folder works fine until their own dependencies are not found. I have no problem with adding say EntityFramework-dlls there. But these in turn have dependencies on ordinary Net-libs that are not found. Is there any way to get around this, without having to drop every dll of the Net framework in the Extensions-folder? =)
    Dmitry Sikorsky
    @DmitrySikorsky
    Hi! I couldn't find any solution for this for now. The only solution I've found is to add direct dependency to assemblies like EntityFramework to the MAIN web application even if it doesn't need it. So if your extension needs EF you can add dependency in your main app project.json and your extension will be able to use it. This is workaround but can't be named 'elegant solution'...
    AnjunaMoon
    @AnjunaMoon
    Yeah, I came to the same conclusion. I think I will continuosly deploy plugins/extensions as Core-packages instead of the old MEF-like way. So the question here is: Should I go for having my plugin-manager edit the main project.json to add dependency to my added plugin-package, or is there a way to dynamically add these dependencies in Startup.cs-contructor (fetching the names of the plugins by scanning the packages-folder in some manner).
    Dmitry Sikorsky
    @DmitrySikorsky
    I think these both options are possible. I think the best one is to publish plugins to NuGet and then take them from it by adding dependencies to the main app's project.json (manually or by some extension manager)
    AnjunaMoon
    @AnjunaMoon
    I agree. on the NuGet-solution, it will involve the least amount of work for pushing updates to our clients. Thanks for your input. (Hoping for an 1.0.0 of ASPNET Core soon, and hopefully some proper MS-documentation)
    Dmitry Sikorsky
    @DmitrySikorsky
    Welcome!
    Артём Баранов
    @artemb89
    Привет, извиняюсь, что пишу не на английском - плохо получается выражать свои мысли. Вчера пробовал использовать ваш проект, столкнулся с некоторыми проблемами. Случайно назвал имя проекта FirstExtension.EntityFrameWork.Sqlite (Work с большой буквы), после чего долго не мог понять почему не находит репозиторий, оказалось, что в ExtCore в классе StorageContext в методе OnModelCreating есть такая проверка a.FullName.Contains("EntityFramework.Sqlite"), предлагаю эту проверку изменить на lowcase или еще как-нибудь. Хотелось бы еще добавить проверку наличия каталога с расширениями, т.к. сейчас, если его нет, то получаем exception. В остальном всё очень понравилось, готов помочь если требуется.
    Артём Баранов
    @artemb89
    Есть еще небольшая проблема с CodeFirst, хотелось бы получить какое-нибудь событие в момент, когда все модели загружены, чтобы была возможность обновить базу, если контекст изменился.
    Пронин Андрей
    @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