2

我是 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.*" 更改为其他内容,但我的代码没有任何方面。

非常感谢任何帮助。

4

2 回答 2

0

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

于 2012-09-06T16:44:05.233 回答
0

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

于 2012-10-30T11:41:14.957 回答