我是 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.*"更改为其他内容,但我的代码没有任何方面。
非常感谢任何帮助。
请您参考如下方法:
尝试将您的属性设置为“虚拟”。我发现如果在使用 AOP 时属性不是虚拟的,您通常会看到空值/默认值。
