私はC#は初めてですが、JavaのSpringで経験を積んでいます。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.*" を別のものに変更することもできますが、コードに側面がありません。
どんな助けでも大歓迎です。