首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将外部程序集加载到Blazor WebAssembly应用程序

将外部程序集加载到Blazor WebAssembly应用程序
EN

Stack Overflow用户
提问于 2020-12-03 16:44:27
回答 2查看 1.1K关注 0票数 1

是否可以动态地将RCL (Razor Component Library)加载到Blazor WebAssembly?

我找到这个Loading an external .NET Standard 2.0 assembly with blazor来加载一个标准的类。

我想要的是开发一个可插拔/可扩展的可视化框架,其中将dll放在ASP.NET核心服务器文件夹中,在该文件夹中可以访问blazor组件

解决方案配置:

  • ASP.NET Core WebAPI项目
  • WebAssembly项目
  • RCL项目1与一些组件
  • RCL项目2与另一个组件

F 210

步骤:

打开Assembly

  • Reference页面,OnInitializedAsync()从WebAPI中提取一些dll作为二进制

  • 加载到程序集中,并在页面

中动态使用

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-29 20:34:45

我终于找到了一个我想和你分享的解决方案。模块管理器允许动态加载任何外部组件

看看这里:

https://github.com/elgransan/BlazorPluginComponents

一些示例代码

代码语言:javascript
复制
        var componentPackage = "RazorClassLibrary2";
        var component = "Component2";
        var stream = await Http.GetStreamAsync($"{MyNavigationManager.BaseUri}/{componentPackage}/{componentPackage}.dll");
        var assembly = AssemblyLoadContext.Default.LoadFromStream(stream);
        componentType = assembly.GetType(componentPackage + "." + component);
        await DOMinterop.IncludeLink(componentPackage, $"/{componentPackage}/{componentPackage}.styles.css");

文件在服务器中的位置

票数 0
EN

Stack Overflow用户

发布于 2021-10-08 10:13:59

很抱歉迟了回答,但是的,你可以这么做。

要使用动态组件,请执行以下步骤:

使用Assembly.LoadfFrom(assemblyFilename)

  • In a .razor文件加载程序集,使用

  • 呈现树构建器动态呈现组件,如:

代码语言:javascript
复制
RenderFragment EditContent = (__builder) =>
{
    __builder.OpenComponent(0, TypeOfYourComponent);
    __builder.AddAttribute(1, "attr1", attrValue);
    ...
    __builder.AddAttribute(n, "attrn", attrNValue);
    __builder.CloseComponent();
};
@EditContent

  1. 实现了从当前加载的程序集中返回所需类型的方法。下面将为您提供一个包含动态加载程序集导出的所有类型的列表:

代码语言:javascript
复制
var exportedTypes = new List<Type>();
var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();

foreach (var assembly in assemblies)
{
    exportedTypes.AddRange(assembly.GetExportedTypes().ToList());
}

在我的示例中,我创建了一个在初始化时从文件夹加载程序集的单例,并在这个单例中创建了一个方法,从步骤3中定义的列表中返回类型。因此,通过在Startup.cs上注册它并将它注入您的剃刀组件,您可以在任何时候调用该服务:

代码语言:javascript
复制
public class CustomComponentService : ICustomComponentService
{
    public CustomComponentService(...)
    {
        // load the assemblies here
    }

    public Type GetCustomComponent(...)
    {
        //search in the loaded assemblies by any criteria you like
    }
}

在Startup.cs ConfigureServices方法中:

代码语言:javascript
复制
_ = services.AddSingleton<ICustomComponentService, CustomComponentService>();

在剃须刀档案中:

代码语言:javascript
复制
@inject ICustomComponentService CustomComponentService

...
__builder.OpenComponent(0, CustomComponentService.GetCustomComponent(...));
...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65130285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档