创建插件加载器类
创建插件加载器类
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);
}
自定义插件加载过程
有的时候我们想自定义插件加载过程,比如加载插件时需要先进行一些验证
我们可以覆写默认的加载逻辑