zoukankan
html css js c++ java
sharpdevelop中如何动态加载程序集
Sharpdevelop将整个程序的功能分散到了多个工程中,这样开发的时候,一个工程就不用加载过多的文件,编译的速度也加快了,IDE的反应速度也能快不少,另外程序在维护的时候,也能方便的替换相应的Assembly来实现不同的功能,组件的升级.
Sharpdevelop将动态加载的功能同样也放在了Addin类中,但是加载的Assembly放在了AddInTree中的AssemlbyHashTable,我使用了一个Dictinary的泛型来替代了原有的Hashtable
Sharpdevelop作者为了保证AddInTree的唯一性使用了一个singleton模式,
private
void
Initlization()
{
System.Diagnostics.Debug.Assert(File.Exists(xmlfile),
"
配置文件不存在
"
);
XmlDocument doc
=
new
XmlDocument();
doc.Load(xmlfile);
//
加载addin的版本信息,作者信息
foreach
(
object
obj
in
doc.DocumentElement.ChildNodes)
{
if
(
!
(obj
is
XmlElement))
continue
;
XmlElement curel
=
obj
as
XmlElement;
switch
(curel.Name)
{
case
"
Runtime
"
:
LoadAssembly(curel);
break
;
default
:
break
;
}
}
}
private
void
LoadAssembly(XmlElement curel)
{
foreach
(
object
obj
in
curel.ChildNodes)
{
if
(
!
(obj
is
XmlElement))
continue
;
//
<Runtime>
//
<Import assembly="cxytestdll.dll"/>
//
</Runtime>
//
取出cxytestdll.dll这个文本
XmlElement xe
=
obj
as
XmlElement;
string
asmfilename
=
xe.Attributes[
"
assembly
"
].InnerText;
Debug.Assert(
!
string
.IsNullOrEmpty(asmfilename),
"
add 中runtime的结点中assembly不能为空,其中包含着assembly的路径
"
);
//
assebmly的路径,并加载
string
asmpath
=
Path.GetDirectoryName(xmlfile)
+
asmfilename;
DefaultAddinTree.AddinTree.LoadAssembly(asmfilename);
}
}
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Windows.Forms;
using
System.Reflection;
namespace
CSLearn
{
public
interface
IAddinTree
{
void
LoadAssembly(
string
assemblyfile);
}
public
class
DefaultAddinTree:IAddinTree
{
Dictionary
<
string
, Assembly
>
asm;
DefaultAddinTree()
{
asm
=
new
Dictionary
<
string
, Assembly
>
();
}
public
Dictionary
<
string
, Assembly
>
LoadedAssembly
{
get
{
return
asm; }
}
static
DefaultAddinTree thetree;
//
不规范的singlton
public
static
DefaultAddinTree AddinTree
{
get
{
if
(thetree
==
null
)
thetree
=
new
DefaultAddinTree();
return
thetree;
}
}
IAddinTree 成员
#region
IAddinTree 成员
//
判断当前,已加载assembly,中是否有assebmly,如果有就不加载了,反之加载
public
void
LoadAssembly(
string
assemblyfile)
{
if
(asm.ContainsKey(assemblyfile))
return
;
Assembly tpasm
=
Assembly.LoadFrom(assemblyfile);
asm.Add(assemblyfile,tpasm);
}
#endregion
}
}
查看全文
相关阅读:
Spring IoC 容器和 AOP
MySQL 锁与事务控制
MySQL 存储引擎的选择
如何理解MySQL 索引最左前缀原则
MySQL 索引
Java 线程池
Java多线程 ReentrantLock、Condition 实现生产者、消费者协作模式
Java多线程并发中 CAS 的使用与理解
Java多线程中协作机制
Mysql-SQL生命周期-show profile
原文地址:https://www.cnblogs.com/sunbingzibo/p/971619.html
最新文章
欢迎制造业同行加入非商业联合开发俱乐部群106930856
免费提供UG、ProE二次开发、定制化开发服务
使用C#/.net语言进行ProE/Creo二次开发
MVC4中 jquery validate 不用submit方式验证表单或单个元素
mvc 日历控件
jquery获得select option的值 和对select option的操作
jquery操作select(取值,设置选中)
MVC4 jquery 样式 主题 用法(案例)
wpf实现IE菜单栏自动隐藏效果
wpf Visibility 动画
热门文章
一次对象自我拯救的演示
读《深入理解java虚拟机》的一些疑问
spring之ioc
HTTP(一)
redis安装
go语言(一)
go(四)
go(三)
go(二)
dubbo 整合 springBoot 实践
Copyright © 2011-2022 走看看