我是C#的新手,但是Java在Spring中是exp。我可以使用Spring示例项目Spring.WcfQuickStart.2010轻松地重现我的问题。Spring.net,导致属性不能设置的AOP
在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>
我也可以只改变值=“Spring.WcfQuickStart。*”别的东西,但后来我有我的代码没有问题。
任何帮助非常感谢。
相当烦人,这工作。它确实使用了Spring DI和AOP马车,因为它编译和运行,但会在生产中造成许多未知的问题。 – user815809
另一个可行的解决方案是创建一个接口ITestDI并实现公共类TestDI:ITestDI。该接口将定义public int test {get;组; }。 – user815809