插件编程的基础,依赖注入

今天同事说有个上海的同学搞C#开发,说了很多名词很厉害,他都没听说过。编程不外乎就那点东西,而且那些挺起来很牛的技术其实就是一个点,一两句话而已,开发过程还是靠的基础知识,基础不好那些高技术什么也没有用的。
其中就有一个名词叫依赖注入的,没什么神奇的,就是一个类接口啊抽象类啊的东西,约定好对应关系,事先做好事先,用的时候转化一下类型,依赖注入就算完了,下来还是普通的知识了:

/// <summary>
/// 根据配置文件,返回 OrderSynchronous 或着 OrderSynchronous 类实例
/// </summary>
/// <returns>IOrderStrategy 类型</returns>
private static PetShop.IBLLStrategy.IOrderStrategy LoadInsertStrategy() {

// 获取 Web.config 文件中 OrderStrategyAssembly 的配置信息
string path = ConfigurationManager.AppSettings["OrderStrategyAssembly"];
string className = ConfigurationManager.AppSettings["OrderStrategyClass"];

// 利用配置信息,创建相关类实例
return (PetShop.IBLLStrategy.IOrderStrategy)Assembly.Load(path).CreateInstance(className);
}



其中

return (PetShop.IBLLStrategy.IOrderStrategy)Assembly.Load(path).CreateInstance(className);


不就是用PetShop.IBLLStrategy.IOrderStrategy接口来强制转化成一个类,
剩下的不是普通的面向对象编程吗。
依赖注入就是这个方法的使用Assembly.Load


不过加载程序集有三个方法,看看他们的区别 C#反射之Assembly.Load,Assembly.LoadFile 与 Assembly.LoadFrom

一.Load方法
1.Load(AssemblyName) 在给定程序集的 AssemblyName 的情况下,加载程序集。
2.Load(AssemblyString) 通过给定程序集的长格式名称加载程序集。
总结: 使用Load方法加载程序集,特别是强命名程序集,能在程序集上应用安全和部署策略,一般情况下都应该优先使用这个方法。
二.LoadFrom (已知程序集的文件名或路径,加载程序集。)
MSDN: LoadFrom 方法具有以下缺点。请考虑改用 Load。
1.如果已加载一个具有相同标识的程序集,则即使指定了不同的路径,LoadFrom 仍返回已加载的程序集。
2.如果用 LoadFrom 加载一个程序集,随后加载上下文中的一个程序集尝试加载具有相同显示名称的程序集,则加载尝试将失败。对程序集进行反序列化时,可能发生这种情况。

总结: LoadFrom只能用于加载不同标识的程序集, 也就是唯一的程序集, 不能用于加载标识相同但路径不同的程序集。

从例子1,2,3的源代码中可以看出来, 三者归根结都是调用RuntimeAssembly.InternalLoadAssemblyName()方法的.



三.LoadFile (加载指定路径上的程序集文件的内容。)

总结: 这个方法是从指定的文件来加载程序集,它是调用外部的API实现的加载方式,和上面Load,LoadFrom方法的不同之处是这个方法不会加载此程序集引用的其他程序集,也就是不会加载程序的依赖项。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值