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
}
}
查看全文
相关阅读:
Go语言v1.8正式发布,有显著的性能提升和变化(go适合服务器编程、网络编程)
NET生成二维码
组合模式
Spring MVC
前端事件
Play Framework + ReactiveMongo
DDD领域驱动设计初探
jsRender模板引擎
C#分布式缓存Couchbase
ABP
原文地址:https://www.cnblogs.com/sunbingzibo/p/971619.html
最新文章
java实现第五届蓝桥杯绳圈
java实现第五届蓝桥杯绳圈
java实现第五届蓝桥杯绳圈
java实现第五届蓝桥杯六角填数
java实现第五届蓝桥杯六角填数
java实现第五届蓝桥杯六角填数
java实现第五届蓝桥杯六角填数
如何在 BitNami 中创建多个 WEB 应用?(转)
几种常见web 容器比较 (tomcat、 jboss 、resin、 weblogic、 websphere、 glassfish)(转)
jboss-as-7.1.1.Final与jdk1.8不兼容解决方案
热门文章
JBOSS的下载安装、环境变量配置以及部署
解决8080端口占用问题
Mybatis Generator最完整配置详解
MyBatis Generator插件之SerializablePlugin
20多个常用的免费WebService接口
【MyBatis】MyBatis分页插件PageHelper的使用
从IntToHex()说起,栈/堆地址标准写法 good
C/S转分布式数据库的解决方法
注意一点衣着
ddd
Copyright © 2011-2022 走看看