Skip to main content
 首页 » 编程设计

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

2024年01月01日22exmyth

我是 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 时属性不是虚拟的,您通常会看到空值/默认值。