LoadPlugins<IStoreProvider>("载入数据访问插件", TCNCConsts.TcncPluginDir_DataAccess);
LoadPlugins<IProtocolProvider>("载入协议支持插件", TCNCConsts.TcncPluginDir_Protocol);
/// <summary>
/// 插件设置
/// </summary>
private void PluginSetting()
{
Notice.Notice("执行插件设置");
Thread.Sleep(300);
string priPath = "Plugins\\DataAccess;Plugins\\Protocol;";
AppDomain.CurrentDomain.SetData("PRIVATE_BINPATH", priPath);
AppDomain.CurrentDomain.SetData("BINPATH_PROBE_ONLY", priPath);
var m = typeof(AppDomainSetup).GetMethod("UpdateContextProperty", BindingFlags.NonPublic | BindingFlags.Static);
var funsion = typeof(AppDomain).GetMethod("GetFusionContext", BindingFlags.NonPublic | BindingFlags.Instance);
m.Invoke(null, new object[] { funsion.Invoke(AppDomain.CurrentDomain, null), "PRIVATE_BINPATH", priPath });
}
/// <summary>
/// 载入插件
/// </summary>
private List<T> LoadPlugins<T>(string msg, string pluginDir) where T : class
{
Notice.Notice(msg);
string storePluginDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, pluginDir);
var files = Directory.GetFiles(storePluginDir);
List<T> stores = new List<T>();
files.SafeForEach(file =>
{
if (file.EndsWith(".dll"))
{
Assembly ass = Assembly.LoadFrom(file);
ass.GetTypes().SafeForEach(t =>
{
Type ti = typeof(T);
if (ti.IsAssignableFrom(t))
{
var iStore = t.GetInstance() as T;
stores.Add(iStore);
}
});
}
});
return stores;
}
Created
April 18, 2018 07:18
-
-
Save wanghuaisheng/0135b6eae7a5dfe8e06158e325640cda to your computer and use it in GitHub Desktop.
设置PrivatePath
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment