我尝试使用Reflection向我的Windows.Net应用程序添加一个插件系统; 但是当有依赖关系的插件时它会失败.
Addon类必须实现一个接口'IAddon'并拥有一个空构造函数.
主程序使用Reflection加载插件:
Assembly assembly = Assembly.LoadFile(@"C:\Temp\TestAddon\Addon.dll");
Type t = assembly.GetType("Test.MyAddon");
ConstructorInfo ctor = t.GetConstructor(new Type[] { });
IAddon addon= (IAddon) ctor.Invoke(new object[] { });
addon.StartAddon();
Run Code Online (Sandbox Code Playgroud)
当addon不使用dependencie时,它工作得很好.但是如果我的插件引用并使用另一个在磁盘上的插件附近保存的DLL(C:\ Temp\TestAddon\MyTools.dll),则会失败:
System.IO.FileNotFoundException:无法加载文件或程序集'MyTools.dll '或其中一个依赖项.
我不想在我的可执行文件附近复制插件DLL,我怎么能告诉.Net运行时在"C:\ Temp\TestAddon"中搜索任何依赖?
请注意添加
Assembly assembly = Assembly.LoadFile(@"C:\Temp\TestAddon\MyTools.dll");
Run Code Online (Sandbox Code Playgroud)
不要改变任何东西.
编辑:
我的问题不再是问题了:我重做了我的表演测试并且我做了一个致命的愚蠢错误:我忘记了一个x1000从毫秒获得秒:/对不起那些家伙.
有关信息:
- 我从PC到本地网络上的DataBase服务器每秒进行1900次更新.
- 如果程序与DB相同,则每秒3.200次更新.
- 我的PC上DataBase服务器每秒3.500次更新我不会重新创建并重新打开一个新的SQLConnection.
- 批量文本每秒5.800次更新.对于我的10.000行,如果需要5秒钟,我的程序就可以了.很抱歉让您担心.
实际上,我使用SQL存储的prodedure在我的数据库中创建一行以避免SQL注入.在C#中我有以下方法:
public void InsertUser(string userCode)
{
using (SqlConnection sqlConnection = new SqlConnection(this.connectionString))
{
SqlCommand sqlCommand = new SqlCommand("InsertUser", sqlConnection);
sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
sqlCommand.Parameters.Add(new SqlParameter("@UserCode", userCode));
sqlConnection.Open();
sqlCommand.ExecuteNonQuery();///0.2 seconds !ERROR HERE! 0.2ms here,NOT 0.2sec!!!
}
}
Run Code Online (Sandbox Code Playgroud)
当我有一行或两行插入时,它很棒.但如果我需要创建1.000个用户和10.000个产品以及5000个宠物,那么这不是最好的解决方案:我将在网络传输中浪费大量时间.
我相信,没有签入,我只能使用有限的回调.所以我不想打电话10.000次:
sqlCommand.BeginExecuteNonQuery()
Run Code Online (Sandbox Code Playgroud)
另一种方法是创建批处理文本,但存在SQL注入风险(并且很难看).
是否有一个'SqlCommandList'对象在.Net中管理它?如何在数据库中进行大量写作?对此有什么好处?