zoukankan      html  css  js  c++  java
  • 有关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 }
  • 相关阅读:
    03_ if 练习 _ little2big
    uva 11275 3D Triangles
    uva 12296 Pieces and Discs
    uvalive 3218 Find the Border
    uvalive 2797 Monster Trap
    uvalive 4992 Jungle Outpost
    uva 2218 Triathlon
    uvalive 3890 Most Distant Point from the Sea
    uvalive 4728 Squares
    uva 10256 The Great Divide
  • 原文地址:https://www.cnblogs.com/isun/p/4217949.html
Copyright © 2011-2022 走看看