Spring.net,AOP导致属性无法设置

时间:2012-09-06 16:03:35

标签: c# c#-4.0 spring.net spring-aop

我是C#的新手,但在Java中是Spring的exp。我可以使用Spring示例项目Spring.WcfQuickStart.2010轻松地重现我的问题。

在Spring.WcfQuickStart.ServerApp.2010项目中执行以下操作

1)添加以下TestDI类。

namespace Spring.WcfQuickStart
{
    public class TestDI
    {
        public int test { get; set; }

        public TestDI()
        { 
            this.test = 10;
            Console.WriteLine("TestDI cons called, value set to {0}", test);
        }
    }
}

2)在CalculatorService.cs中,返回“ServerApp Calculator testDI value =”+ tdi.test;

3)在App.config中执行以下操作。

<object id="testObj" type="Spring.WcfQuickStart.TestDI, Spring.WcfQuickStart.ServerApp" singleton="true"/> 

  <object id="calculator" singleton="true"
          type="Spring.WcfQuickStart.CalculatorService, Spring.WcfQuickStart.ServerApp">
    <property name="tdi" ref="testObj"/>
    <property name="SleepInSeconds" value="1"/>
</object>

现在,如果你运行程序,你会期望客户端返回值10,但我得到值0.这对于我定义的任何属性都是相同的。如果将TestDI属性测试更改为静态,则同样的问题。

阻止此操作并获取值10的唯一方法是从App.config文件中删除以下内容。

<object id="serviceOperation" type="Spring.Aop.Support.SdkRegularExpressionMethodPointcut, Spring.Aop">
    <property name="pattern" value="Spring.WcfQuickStart.*"/>
</object> 

我也可以将value =“Spring.WcfQuickStart。*”更改为其他内容但是我的代码没有任何方面。

任何帮助非常感谢。

2 个答案:

答案 0 :(得分:0)

尝试将您的属性设置为“虚拟”。我发现如果在使用AOP时属性不是虚拟的,通常会看到null / default值。

答案 1 :(得分:0)

Spring.NET文档的第13.6节解释了这个原因:http://www.springframework.net/doc-latest/reference/html/aop.html#aop-proxy-mechanism。听起来像是在使用基于继承的机制。