范例-项目-.NET-PetShop-4.0-架构设计:依赖注入

ylbtech-范例-项目-.NET-PetShop-4.0-架构设计:依赖注入

 

1. 依赖注入返回顶部
1、

依赖注入

  • “抽象”的概念非常重要,但不管怎样抽象,最终还是需要具体的实现。例如前面介绍的插入订单的策略,我们提供了IOrderStrategy接口。然而对于BLL层来说,需要插入订单时,我们仍然要创建具体的OrderStrategy对象,也就是说下面的代码是不可避免的:
  • IOrderStrategy orderInsert = new OrderSynchronous();
  • 这样一来,BBL中仍然为具体的OrderSynchronous对象所制约
2、
  • 理想的情况是,具体对象的创建永远都不要在代码中实现。也就是说,模块与模块之间的依赖,由原来的内部依赖,转移到外部
  • 依赖是必须的一旦转移到外部,就需要将该依赖注入到模块中,这就是所谓的“依赖注入(Dependency Injection)”。
  • 关于“依赖注入”,Martin Fowler有很好的文章来介绍,可以访问:http://martinfowler.com/articles/injection.html
  • 对于“依赖注入”,有一些轻量级容器已经实现。如Spring,PicoContainer等。在.Net平台下,也有Spring.Net等容器支持。
  • 但究其根本,实际上还是通过反射来完成对依赖的注入,如果不使用这些轻量级容器来专门完成“依赖注入”的话,我们也可以引入反射和xml配置文件来解除模块对具体对象的依赖
  • 在PetShop中,这种方式随处可见。例如在DALFactory中的DataAccess类(参见代码)。
3、
  • 由于PetShop是一个Asp.Net的应用系统,所以配置信息都可以放在Web.Config文件下。然后,通过ConfigurationManager来获取,例如:
  • private static readonly string orderPath = ConfigurationManager.AppSettings["OrdersDAL"];
  • 在Web.config的配置如下:
4、
  • 如果我们的数据访问层,需要访问Oracle数据库,则只需要修改web.config中的配置
  • 而DALFactory中的代码根本不需要改变。
  • 这个方法就可以解决前面提到的OrderStrategy的问题。在BBL的Order类中,需要调用IOrderStragety对象,以此来插入订单。方法是:
  • private static readonly PetShop.IBLLStrategy.IOrderStrategy orderInsertStrategy = LoadInsertStrategy();
5、
private static PetShop.IBLLStrategy.IOrderStrategy LoadInsertStrategy() 
{
      // Look up which strategy to use from config file
      string path = ConfigurationManager.AppSettings["OrderStrategyAssembly"];
      string className = ConfigurationManager.AppSettings["OrderStrategyClass"];

      return (PetShop.IBLLStrategy.IOrderStrategy)Assembly.Load(path).CreateInstance(className);
}
6、
  • IOrderStrategy对象通过LoadInsertStrategy()方法来创建。它读取了配置节OrderStrategyAssembly和OrderStrategyClass,然后利用反射创建该对象
  • 而在web.config中,配置如下:
  • 如果需要修改插入订单的策略为异步,仅需要修改为
  • 这样自然就解决了具体对象创建的问题,利用配置文件和反射实现了依赖的注入
7、
2.返回顶部
 
3.返回顶部
 
4. 附返回顶部
1、附

PetShop代码及相关文档链接:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet.asp
PetShop 4.0 download:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet4.asp
PetShop 3.0 download:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet3.asp
PetShop 4.0是在.Net Framework 2.0下开发的。之前的3.0,2.0版本则可以在.Net Framework 1.x下运行。
如果是.Net 1.x,建议参考PetShop 3.0
PetShop 4.0引入了许多.Net 2.0具有的特性,如泛型、Transacation、Asp.Net 2.0 MemberShip等特性。

2、
5.返回顶部
 
 
6.返回顶部
 
warn 作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

你可能感兴趣的:(范例-项目-.NET-PetShop-4.0-架构设计:依赖注入)