标签: plugin-architecture

我如何在Ruby on Rails中使用插件架构?

我必须在Ruby on Rails上构建一个社交网站.网站中的功能可能会不时变化; 所以我们需要轻松添加/删除功能.此外,我们可能正在建立另一个社交网站.由于这些原因,我们正在考虑为RoR中的社交网站构建一个基本框架,其功能是安装或卸载框架的扩展.

我之前在Joomla工作过!CMS及其用于添加/删除扩展的体系结构正是我所关注的.在Joomla!安装通常有一个管理员端,您可以从中添加/删除/自定义扩展.

我是RoR的新手,发现很难决定如何做到这一点.任何帮助将不胜感激.

architecture ruby-on-rails social-networking plugin-architecture plug-and-play

7
推荐指数
1
解决办法
1893
查看次数

使用Typescript使用Webpack动态加载模块

我正在尝试构建一个支持插件的Web应用程序,环境是Angular 2(到目前为止),Typescript 2.1和Webpack 2.我有一些扩展点(插槽)插件可以在其中绘制内容:基本上我有一个组件它能够托管运行时已知的其他组件(参见"掌握Angular 2组件"第10章的想法,以及SO + plunker如何在运行时编译和"绘制"Angular组件)

这就是我想要实现的目标:

// in plugin.service.ts
loadPlugin(url)
{
    return System.import('absolute OR relative ?? plugin base path' + name)
           .then((pluginModule) => {
               const Plugin = pluginModule.default;
               // then use the plugin
    });
}

...

//content of the plugin file being imported
export default class HeaderButtonsPlugin {
    constructor() {}
    //useful things about the plugin
}
Run Code Online (Sandbox Code Playgroud)

我在运行时使用System.importWebpack 导入模块,虽然我知道不推荐使用,但AFAIK是使用typescript动态导入模块的唯一方法,因为importtypescript本身尚不支持(参考这里).(有没有其他方法可以实现这一目标?)

现在,仅仅为了测试系统,我使用下面的目录树将插件目录包含在应用程序的同一根目录(src目录)中; 请注意,这会导致webpack在编译时知道插件代码的存在,并将插件和应用程序打包在同一个bundle的集合中,这是为了测试插件架构功能而进行的简化; 这是文件夹树:

- src
    - app
        - core
            - plugin.service.ts
    - …
Run Code Online (Sandbox Code Playgroud)

plugin-architecture webpack-2 typescript2.0 angular

7
推荐指数
1
解决办法
3237
查看次数

如何在ASP .NET中动态插入网页(并更新插件)?

对于常规组件,可以使用MEF动态加载组件.如果这些程序集需要实时更新,建议使用AppDomain来托管动态程序集(可能可以使用托管外接程序框架(MAF)).需要更新时,将停止appdomain,更新程序集并重新加载appdomain.

那些由ASP .NET加载的包含类后面代码的程序集呢?如何在不强制重新启动主应用程序域的情况下更新它们.是否可以在动态应用程序域中托管我的一些页面?你会怎么做?这个appdomain可以共享登录令牌和身份验证的东西,这样用户就不必重新登录了吗?

谢谢

asp.net mef appdomain plugin-architecture maf

6
推荐指数
1
解决办法
697
查看次数

在类库中获取Razor模板

我在我的解决方案中有一个基于插件的架构(使用区域),工作正常.

问题是插件项目是类库,因此当我右键单击views文件夹时,"添加视图"向导不可见.

有没有办法在类库中获取该向导?或者是否有其他方法可以在类库项目中获得脚手架?

c# plugin-architecture visual-studio asp.net-mvc-3

6
推荐指数
1
解决办法
962
查看次数

Angular App 无需重新编译即可动态加载插件

我正在尝试开发 Web Api (NET CORE) 可插件应用程序的前端。我想使用 Angular 9,但我不是 Angular 专家。

我的后端被设计为可扩展的,在启动时它会在指定的文件夹中监视,如果存在一个或多个包含扩展基本应用程序(如插件)逻辑的 dll 文件,它会加载它们。我想在前端使用类似的方法。我尝试了不同的解决方案并阅读了很多文章,但很难找到想要在编译时导入未知插件的人。

我尝试了懒惰的模块(从这个开始:https : //www.mokkapps.de/blog/manually-lazy-load-modules-and-components-in-angular/)这将是完美的,但使用这个我必须知道实现插件(模块)在编译我的 angular 应用程序之前,因为如果我想使用模块,我必须在我的主应用程序中使用导入功能。

因此,我进行了更多搜索,在使用 Angular CLI 和 Angular 5 在运行时动态加载新模块一文之后,我尝试了 System.Js 方法,但找不到适用于 angular 9 的解决方案。

我很确定我不是唯一一个会创建可插入的 Angular 应用程序的人,该应用程序无需重新编译主应用程序即可加载插件。

我需要一些关于正确方法的建议,或者一个使用插件架构的 angular 应用程序的工作示例。

plugin-architecture web-frontend angular system.js

6
推荐指数
1
解决办法
1860
查看次数

为J2SE应用程序添加插件支持的最佳技术?

我正在编写一个J2SE桌面应用程序,需要其中一个组件可插拔.我已经为这个插件定义了Java接口.用户应该能够在运行时(通过GUI)选择他们想要使用的这个接口的实现(例如在初始化对话框中).我设想将每个插件打包为一个JAR文件,其中包含实现类以及它可能需要的任何帮助程序类.

在桌面Java应用程序中执行此类操作的最佳技术是什么?

java plugins plugin-architecture

5
推荐指数
1
解决办法
1267
查看次数

如何在 Flutter Dart 中实现插件架构

我想在 Flutter Dart 中实现一个插件架构。过程如下: 1. 用户下载应用程序。2. 用户从我们的网站加载插件。3. 应用程序查看插件是否实现了接口。4. 如果实现了接口,则将信息和小部件从插件加载到应用程序。

我已经在 C# 中使用运行时编译的 DLL 加载实现了相同的过程,但无法为 Flutter 找到它。

我已经查看了互联网上可用的一些以前的问题和资源,我发现的最接近的是这个,https://pub.dev/packages/plugins,但 Dart 2 不支持该插件并已弃用

这是我在 C# 中实现的代码。

            int i = 0;

            if (Directory.Exists("Plugins"))
            {
                dllFileNames = Directory.GetFiles("Plugins", "*.dll");

                ICollection<Assembly> assemblies = new List<Assembly>(dllFileNames.Length);
                foreach (string dllFile in dllFileNames)
                {
                    AssemblyName an = AssemblyName.GetAssemblyName(dllFile);
                    Assembly assembly = Assembly.Load(an);
                    assemblies.Add(assembly);
                }

                Type pluginType = typeof(IPlugin);
                List<Type> pluginTypes = new List<Type>();
                foreach (Assembly assembly in assemblies)
                {
                    if (assembly != null)
                    {
                        Type[] types = …
Run Code Online (Sandbox Code Playgroud)

plugin-architecture dart mobile-development flutter

5
推荐指数
1
解决办法
641
查看次数

实现插件架构 - 动态DLL加载

我有一个应用程序,它基本上是一个带有预加载控件的设计器,您可以使用控件设计页面.

我打算将来发布越来越多的控件.我不想为新添加的控件发布新版本,因为它有它的缺点.所以我在考虑添加/插件类型的架构,我只是单独发布它们可以安装的插件/插件,并获得设计器内的控件.

现在我使用xml文件作为插件来指定控件,它的行为,它的样式等.每个xml(addon)代表一个控件.但我发现很难实现这个,因为我要编写一个通用的解析器来读取所有的插件.

相反,我可以为每个插件释放一个dll,这使我能够更好地控制编写代码来定义控件的行为/外观并通过主引擎动态加载它吗?如果是这样,我如何检查dll并在我的应用程序中动态加载它?

.net c# asp.net plugin-architecture dynamic-loading

3
推荐指数
1
解决办法
1万
查看次数

沙盒插件架构

我在谷歌搜索和搜索SO的插件架构,我对如何实现它的一般知识感到满意.现在我进一步寻找沙盒架构.基本上我的意思是带插件的应用程序,插件崩溃不会导致整个应用程序崩溃,插件可以重新加载.我找不到好的文档.我知道Firefox实现它(崩溃的Flash插件不会影响整个FF的东西,可以重新加载)谢谢!

c++ sandbox plugin-architecture

3
推荐指数
1
解决办法
756
查看次数

带接口的插件架构; 接口检查不起作用

我在应用程序中实现了一个简单的插件架构.插件要求是使用接口(IPlugin)定义的,该接口位于应用程序和插件引用的*.dll中.该应用程序有一个插件管理器(也在同一个*.dll中),它通过查找插件文件夹中的所有*.dll加载插件,加载它们,然后检查插件是否实现了接口.我已经通过两种不同的方式检查了[以前通过一个简单的if(插件是IPlugin)],但是当插件实现接口时,都不会识别.这是代码:

Assembly pluginAssembly = Assembly.LoadFrom(currFile.FullName);
if (pluginAssembly != null)
{
    foreach (Type currType in pluginAssembly.GetTypes())
    {
        if (currType.GetInterfaces().Contains(typeof(IPlugin)))
        {
            // Code here is never executing
            // even when the currType derives from IPlugin
        }
    }                    
}
Run Code Online (Sandbox Code Playgroud)

我曾经测试过一个特定的类名("插件"),但后来我允许它循环遍历程序集中的所有类都无济于事.(这是我在其他地方找到的一个例子.)为了使这更复杂一点,有两个接口,每个接口实现原始接口(IPluginA,IPluginB).该插件实际上实现了一个更具体的接口(IPluginB).但是,我已经尝试使用插件只是实现更通用的接口(IPlugin),这仍然无法正常工作.

[编辑:回应我第一次收到的两个回复]是的,我尝试过使用IsAssignableFrom.请参阅以下内容:

Assembly pluginAssembly = Assembly.LoadFrom(currFile.FullName);
if (pluginAssembly != null)
{
    foreach (Type currType in pluginAssembly.GetTypes())
    {
        if (typeof(IPlugin).IsAssignableFrom(currType))
        {
            string test = "test";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# interface plugin-architecture

2
推荐指数
1
解决办法
1612
查看次数

Python3插件系统

我正在尝试创建一个类似于yapsy的插件框架(不幸的是yapsy不兼容python3).

我的代码看起来像这样:

root
   main.py
   plugins/
       __init__.py
       PluginManager.py
       UI/
           __init__.py
           textui.py
Run Code Online (Sandbox Code Playgroud)

在PluginManager.py中我定义了以下类:

class PluginMetaclass(type):
    def __init__(cls, name, base, attrs):
        if not hasattr(cls, 'registered'):
            cls.registered = []
        else:
            cls.registered.append((name,cls))

class UI_Plugins(object):
    __metaclass__ = PluginMetaclass

    #...some code here....

    def load():
         #...some code here too...

        if "__init__" in  os.path.basename(candidate_filepath):
            sys.path.append(plugin_info['path'])
        try:
            candidateMainFile = open(candidate_filepath+".py","r")  
            exec(candidateMainFile,candidate_globals)
        except Exception as e:
            logging.error("Unable to execute the code in plugin: %s" % candidate_filepath)
            logging.error("\t The following problem occured: %s %s " % (os.linesep, e))
            if "__init__" in  os.path.basename(candidate_filepath): …
Run Code Online (Sandbox Code Playgroud)

python plugin-architecture

2
推荐指数
1
解决办法
1529
查看次数

为什么Orchard没有模型视图控制器?

我正在和果园一起工作.写这样一个项目是我的梦想!所以我开始研究一个回合.关于果园感兴趣的是,果园是mvc项目,但为什么它的网络层解决方案中没有任何模型,视图控制器?它使用 CleanArchitecture或某些特定的架构像这样

我试图在果园文件中了解这个案例,但我没有找到任何关于它的描述.

asp.net-mvc plugin-architecture orchardcms modular-design clean-architecture

1
推荐指数
1
解决办法
125
查看次数