有关WCSF的几点整理

本文示例代码

一、CreateNew Attribute实现属性注入

Steps:

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

2/ 为其添加[CreateNew] Attribute。

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

1 public partial class Sample : Microsoft.Practices.CompositeWeb.Web.UI.Page
2 {
3     [CreateNew]
4     public ComputeService ServiceForCompute
5     {
6         set;
7         get;
8     }
9 }

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

解决办法:

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

1 <%@ 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/ 页面可以任意的对其赋值、取值。

 1 private StateValue<int> m_ResultValue;
 2 public int ResultValue
 3 {
 4     get
 5     {
 6         return m_ResultValue.Value;
 7     }
 8     set
 9     {
10         m_ResultValue.Value = value;
11     }
12 }
13 
14 [InjectionMethod]
15 public void InitState([StateDependency("result")]StateValue<int> resultValue)
16 {
17     m_ResultValue = resultValue;
18 }

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

 

四、InjectionConstructor Attribute

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

 

五、module services的注册和使用

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

Steps:

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

 1 public override void Load(CompositionContainer container)
 2 {
 3     base.Load(container);
 4 
 5     AddModuleServices(container.Services);
 6 }
 7 
 8 protected virtual void AddModuleServices(IServiceCollection moduleServices)
 9 {
10     moduleServices.AddNew<SecondService, ISecondService>();
11 }

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

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

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

 

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

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

1 [InjectionConstructor]
2 public ComputeService([ServiceDependency] ISecondService secondService)
3 {
4     this.m_SecondCalculateService = secondService;
5 }

 

转载于:https://www.cnblogs.com/isun/p/4217949.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值