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
}
}
查看全文
相关阅读:
PHP-配置方法
正则表达式-基础使用整理
SEO-长尾词与分词技术
SEO-站外优化规范
SEO-站内优化规范
SEO-友情链接注意事项
java netty之ServerBootstrap的启动
[curator] Netflix Curator 使用
Netty5.x中新增和值得注意的点
带连接池的netty客户端核心功能实现剖解
原文地址:https://www.cnblogs.com/sunbingzibo/p/971619.html
最新文章
etcd使用
etcd
cronexpr任务调度
执行脚本命令
golang context用法详解
httpserver支持路由传输控制器
poj
二分图判定
ACdream 1726 A Math game (dfs+二分)
AOJ 2170 Marked Ancestor (基础并查集)
热门文章
ACdream 1735 输油管道 (排序)
poj-2236 Wireless Network &&poj-1611 The Suspects && poj-2524 Ubiquitous Religions (基础并查集)
poj -2010 Moo University
hdu
判断线段相交 -- 51nod 1264 线段相交
poj -3614 Sunscreen(贪心 + 优先队列)
SQL基本用法-行转列
Oracle-orclEXORIM
Oracle-操作
Oracle-函数大全
Copyright © 2011-2022 走看看