Skip to content

创建插件加载器类

注意

你应当先设计插件元数据,插件基类,后再来创建加载器类

创建插件加载器类

csharp
using System;
using Serilog;
using ShadowExample.Core.Plugins;
using ShadowPluginLoader.WinUI;

namespace ShadowExample.Core
{
    public class ShadowExamplePluginLoader : AbstractPluginLoader<ExampleMetaData, IExamplePlugin>
    {
        public ShadowExamplePluginLoader(ILogger logger) : base(logger)
        {
        }
        public ShadowExamplePluginLoader() : base()
        {
        }

    }
}

使用依赖注入

插件加载器加载插件的功能主要由依赖注入实现

所以我们先要创建依赖注入,必须使用DryIoc这个库来依赖注入

以下是一个简单示例,更多请查阅DryIoc文档:

csharp
using System;
using DryIoc;

namespace ShadowExample.Core;

public static class DiFactory
{
    public static Container Services { get; }
    static DiFactory()
    {
        Services = new Container(rules => rules.With(FactoryMethod.ConstructorWithResolvableArguments));
        Services.Register(
            Made.Of(() => Serilog.Log.ForContext(Arg.Index<Type>(0)), r => r.Parent.ImplementationType),
            setup: Setup.With(condition: r => r.Parent.ImplementationType != null));
        AbstractPluginLoader<ExampleMetaData, PluginBase>.Services = Services;
        Services.Register<ShadowExamplePluginLoader>(reuse: Reuse.Singleton);
    }


}

在主项目中使用

App.cs文件中需要初始化

csharp
public App()
{
    this.InitializeComponent();
    ApplicationExtensionHost.Initialize(this); 
}

自定义插件加载过程

有的时候我们想自定义插件加载过程,比如加载插件时需要先进行一些验证

我们可以覆写默认的加载逻辑