本文示例代码

一、CreateNew Attribute实现属性注入

Steps:

1/ aspx创建某个服务的属性。

2/ 为其添加[CreateNew] Attribute。

3/ 页面继承自Microsoft.Practices.CompositeWeb.Web.UI.Page,而非System.Web.UI.Page。

 public partial class Sample : Microsoft.Practices.CompositeWeb.Web.UI.Page
{
[CreateNew]
public ComputeService ServiceForCompute
{
set;
get;
}
}

运行页面。黄页,发生错误。

解决办法:

4/ 为web site添加Globe文件,使Application继承自Microsoft.Practices.CompositeWeb.WebClientApplication。

 <%@ Application Language="C#" Inherits="Microsoft.Practices.CompositeWeb.WebClientApplication" %>

二、InjectionMethod Attribute

在class中,[InjectionMethod]修饰过的方法将在该类实例化的时候执行,仅次于类的constructor。

三、使用StateValue<T>进行值的持久化

StateValue<T>值的存取是通过Session来完成的,这也就实现了变量的持久化。

Steps:

1/ 声明一StateValue<int>变量。

2/ 在class的初始化方法中(标记了[InjectionMethod]的方法),通过StateDependency为其注入指定Key值的Session。

3/ 页面可以任意的对其赋值、取值。

 private StateValue<int> m_ResultValue;
public int ResultValue
{
get
{
return m_ResultValue.Value;
}
set
{
m_ResultValue.Value = value;
}
} [InjectionMethod]
public void InitState([StateDependency("result")]StateValue<int> resultValue)
{
m_ResultValue = resultValue;
}

[StateDependency("result")]意味着parameter resultValue的内容从Session["result"]注入。

四、InjectionConstructor Attribute

用来修饰类的构造函数,指明该类需被某处注入时,默认调取的constructor。一个class中,最多有一个构造函数可标记该标签。

五、module services的注册和使用

(1) 以module为单位对其内的Services进行注册。

Steps:

1/ 为每一module创建一个(且只创建一个)继承自ModuleInitializer的类,override其中的Load方法,完成服务的注册。

 public override void Load(CompositionContainer container)
{
base.Load(container); AddModuleServices(container.Services);
} protected virtual void AddModuleServices(IServiceCollection moduleServices)
{
moduleServices.AddNew<SecondService, ISecondService>();
}

2/ 在Web.config中配置需加载的modules。

 <module name="Calculation" assemblyName="Modules" virtualPath="~/"></module>

assemblyName指明需注册Services的dll来源。在站点初始化的时候,通过指定的dll,由反射的方式找到其中继承自ModuleInitializer的类,完成容器内服务的注册。

(2) 由ServiceDependency标签使用依赖注入容器内的服务

Interface被ServiceDependency标记,意味着从容器内获取其实现类。

 [InjectionConstructor]
public ComputeService([ServiceDependency] ISecondService secondService)
{
this.m_SecondCalculateService = secondService;
}

最新文章

  1. PHPCMS 实现上一篇下一篇的几种方法
  2. DBA日常工作内容和职责
  3. adb使用
  4. jQuery实现隔行变色
  5. 剑指offer系列58---把数组排成最小的数
  6. 深入C语言可变参数(va_arg,va_list,va_start,va_end,_INTSIZEOF)
  7. [ArcGIS Engine]栅格数据处理 RasterDataset RasterLayer Raster RasterBandCollection
  8. shell中exec解析
  9. Python之日期与时间处理模块(date和datetime)
  10. iOS 生成随机字符串 从指定字符串随机产生n个长度的新字符串
  11. MySql5.7安装及配置
  12. 企业信息化快速开发平台--JeeSite
  13. docker容器日志收集方案(方案一 filebeat+本地日志收集)
  14. GDScript 格式化字符串
  15. ado.net EF学习系列----深入理解查询延迟加载技术(转载)
  16. c# 简易绘制C语言头文件包含关系图
  17. ansible 学习记录
  18. Mac下驱动BCM20702A0 USB蓝牙
  19. 渐入OO课的深处,探索多线程的秘密——OO第二次博客总结
  20. 实验三 敏捷开发与XP实践20145204和20145236

热门文章

  1. JavaScript Event Loop和微任务、宏任务
  2. 如何理解Hibernate的持久化?
  3. linux系统基础之--进程计划(基于centos7.4 1708)
  4. jquery实现表单验证简单实例
  5. JSP + servlet 源码 实现文件的上传
  6. 『Python基础-6』if语句, if-else语句
  7. day06-codes and exercise in class
  8. Django学习之mysql增删改查
  9. 第1天 Java基础语法
  10. 利用RabbitMQ、MySQL实现超大用户级别的消息在/离线收发