我是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。*”更改为其他内容但是我的代码没有任何方面。
任何帮助非常感谢。
答案 0 :(得分:0)
尝试将您的属性设置为“虚拟”。我发现如果在使用AOP时属性不是虚拟的,通常会看到null / default值。
答案 1 :(得分:0)
Spring.NET文档的第13.6节解释了这个原因:http://www.springframework.net/doc-latest/reference/html/aop.html#aop-proxy-mechanism。听起来像是在使用基于继承的机制。