初始化版本

This commit is contained in:
LL
2025-11-14 16:12:32 +08:00
commit ea40f18aa6
326 changed files with 137063 additions and 0 deletions

View File

@@ -0,0 +1,81 @@
using System.Collections.Generic;
namespace NetWorkHelper.Addins
{
/// <summary>
/// 用于宿主应用程序向插件传递必要的参数信息
/// </summary>
public static class AddinUtil
{
private static IDictionary<string, object> DicUtil = new Dictionary<string, object>();
#region RegisterObject
/// <summary>
/// RegisterObject
/// </summary>
/// <param name="name"></param>
/// <param name="obj"></param>
public static void RegisterObject(string name, object obj)
{
lock (AddinUtil.DicUtil)
{
if (AddinUtil.DicUtil.ContainsKey(name))
{
AddinUtil.Remove(name);
}
AddinUtil.DicUtil.Add(name, obj);
}
}
#endregion
#region GetObject
/// <summary>
/// GetObject
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static object GetObject(string name)
{
lock (AddinUtil.DicUtil)
{
if (AddinUtil.DicUtil.ContainsKey(name))
{
return AddinUtil.DicUtil[name];
}
return null;
}
}
#endregion
#region Remove
/// <summary>
/// Remove
/// </summary>
/// <param name="name"></param>
public static void Remove(string name)
{
lock (AddinUtil.DicUtil)
{
if (AddinUtil.DicUtil.ContainsKey(name))
{
AddinUtil.DicUtil.Remove(name);
}
}
}
#endregion
#region Clear
/// <summary>
/// Clear
/// </summary>
public static void Clear()
{
lock (AddinUtil.DicUtil)
{
AddinUtil.DicUtil.Clear();
}
}
#endregion
}
}

View File

@@ -0,0 +1,49 @@

namespace NetWorkHelper.Addins
{
/// <summary>
/// 所有插件基本接口
/// </summary>
public interface IAddin
{
/// <summary>
/// OnLoading 生命周期回调当插件加载完毕被调用。可以从AddinUtil获取主应用传递的参数来初始化插件
/// </summary>
void OnLoading();
/// <summary>
/// BeforeTerminating 生命周期回调,卸载插件前调用
/// </summary>
void BeforeTerminating();
/// <summary>
/// Enabled 插件是否启用
/// </summary>
bool Enabled { get; set; }
/// <summary>
/// AddinKey 插件关键字不同的插件其Key是不一样的
/// </summary>
int AddinKey { get; }
/// <summary>
/// ServiceName 插件提供的服务的名字
/// </summary>
string AddinName { get; }
/// <summary>
/// Description 插件的描述信息
/// </summary>
string Description { get; }
/// <summary>
/// Version 插件版本
/// </summary>
float Version { get; }
}
public class AddinHelper
{
public const string AddinSign = "BinGoo.dll"; //所有的插件都以"BinGoo.dll"结尾
}
}

View File

@@ -0,0 +1,67 @@
using NetWorkHelper.ICommond;
using System.Collections.Generic;
namespace NetWorkHelper.Addins
{
/// <summary>
/// 用于加载/卸载,管理各种插件接口。
/// </summary>
public interface IAddinManager
{
#region Property
/// <summary>
/// CopyToMemory 是否将插件拷贝到内存后加载
/// </summary>
bool CopyToMemory { get; set; }
/// <summary>
/// AddinList 已加载的插件列表
/// </summary>
IList<IAddin> AddinList { get; } //集合中为IAddin
#endregion
#region Method
/// <summary>
/// LoadDefault 加载当前目录或子目录下的所有有效插件
/// </summary>
void LoadDefault();
/// <summary>
/// LoadAllAddins 加载指定目录下的所有插件
/// </summary>
void LoadAllAddins(string addinFolderPath, bool searchChildFolder);
/// <summary>
/// LoadAddinAssembly 加载指定的插件
/// </summary>
void LoadAddinAssembly(string assemblyPath);
/// <summary>
/// Clear 清空所有已经加载的插件
/// </summary>
void Clear();
/// <summary>
/// DynRemoveAddin 动态移除指定的插件
/// </summary>
void DynRemoveAddin(int addinKey);
/// <summary>
/// EnableAddin 启用指定的插件
/// </summary>
void EnableAddin(int addinKey);
/// <summary>
/// EnableAddin 禁用指定的插件
/// </summary>
void DisableAddin(int addinKey);
IAddin GetAddin(int addinKey);
#endregion
#region Event
event NetWorkEventHandler AddinsChanged;
#endregion
}
}

View File

@@ -0,0 +1,168 @@
using NetWorkHelper.Helper;
using NetWorkHelper.ICollections;
using NetWorkHelper.ICommond;
using System;
using System.Collections.Generic;
using System.Reflection;
namespace NetWorkHelper.Addins
{
/// <summary>
/// 插件管理类
/// </summary>
public class NetAddinManagement : IAddinManager
{
private IDictionary<int, IAddin> dicAddins = new Dictionary<int, IAddin>();
public event NetWorkEventHandler AddinsChanged;
public NetAddinManagement()
{
this.AddinsChanged += delegate { };
}
#region IAddinManagement
#region LoadAllAddins
public void LoadAllAddins(string addin_FolderPath, bool searchChildFolder)
{
ReflectionHelper.TypeLoadConfig config = new ReflectionHelper.TypeLoadConfig(this.copyToMem, false, AddinHelper.AddinSign);
IList<Type> addinTypeList = ReflectionHelper.LoadDerivedType(typeof(IAddin), addin_FolderPath, searchChildFolder, config);
foreach (Type addinType in addinTypeList)
{
IAddin addin = (IAddin)Activator.CreateInstance(addinType);
this.dicAddins.Add(addin.AddinKey, addin);
addin.OnLoading();
}
this.AddinsChanged();
}
#endregion
#region LoadDefault
public void LoadDefault()
{
this.LoadAllAddins(AppDomain.CurrentDomain.BaseDirectory, true);
}
#endregion
#region LoadAddinAssembly
public void LoadAddinAssembly(string assemblyPath)
{
Assembly asm = null;
if (this.copyToMem)
{
byte[] addinStream = FileHelper.ReadFileReturnBytes(assemblyPath);
asm = Assembly.Load(addinStream);
}
else
{
asm = Assembly.LoadFrom(assemblyPath);
}
IList<IAddin> newList = ReflectionHelper.LoadDerivedInstance<IAddin>(asm);
foreach (IAddin newAddin in newList)
{
this.dicAddins.Add(newAddin.AddinKey, newAddin);
newAddin.OnLoading();
}
this.AddinsChanged();
}
#endregion
#region Clear ,DynRemoveAddin
public void Clear()
{
foreach (IAddin addin in this.dicAddins.Values)
{
try
{
addin.BeforeTerminating();
}
catch { }
}
this.dicAddins.Clear();
this.AddinsChanged();
}
public void DynRemoveAddin(int addinKey)
{
IAddin dest = this.GetAddin(addinKey);
if (dest != null)
{
dest.BeforeTerminating();
this.dicAddins.Remove(addinKey);
this.AddinsChanged();
}
}
private bool ContainsAddin(int addinKey)
{
return this.dicAddins.ContainsKey(addinKey);
}
#endregion
#region AddinList
public IList<IAddin> AddinList
{
get
{
return CollectionConverter.CopyAllToList<IAddin>(this.dicAddins.Values);
}
}
#endregion
#region GetAddin
public IAddin GetAddin(int addinKey)
{
if (!this.dicAddins.ContainsKey(addinKey))
{
return null;
}
return this.dicAddins[addinKey];
}
#endregion
#region event ,property
private bool copyToMem = false;
public bool CopyToMemory
{
get
{
return this.copyToMem;
}
set
{
this.copyToMem = value;
}
}
#endregion
#region EnableAddin ,DisableAddin
public void EnableAddin(int addinKey)
{
IAddin dest = this.GetAddin(addinKey);
if (dest != null)
{
dest.Enabled = true;
}
}
public void DisableAddin(int addinKey)
{
IAddin dest = this.GetAddin(addinKey);
if (dest != null)
{
dest.Enabled = false;
}
}
#endregion
#endregion
}
}