[seasar-dotnet:1510] [Quill]AOP利用時、引数ウィンドウハンドルの値が変わってしまう。
Yuriko Ohguchi
[E-MAIL ADDRESS DELETED]
2009年 10月 7日 (水) 14:28:02 JST
はじめまして、大口といいます。
今回初めてQuillを利用させていただきましたが
標題の件で困ってしまったため報告させていただきます。
開発環境:Microsoft Visual Studio 2005 Ver 8.0.50727.762 (SP.050727-7600)
開発言語:C#(.NET Framework Ver 2.0.50727 SP2)
S2Container.NET 1.3.16.1利用
Quillのコンテナで管理しているサービスにAOPを用いた際、
サービスのメソッド引数に設定したウィンドウハンドルの値が
変更されてしまいました。
(具体的には下記のサンプルソース および 実行結果 をご参照ください)
今回は、ウィンドウハンドルを渡す必要のあるメソッドには
AOPを利用しないよう修正して対応をしましたが
もっと根本的な解決方法はありませんでしょうか?
ご教授よろしくお願いいたします。
以下、サンプルソースとなります。
//フォーム
namespace Seasar.S2FormExample.Forms
{
public partial class FrmMainMenu : Form
{
protected IHogeService hogeService;
public FrmMainMenu()
{
InitializeComponent();
}
private void btnHoge_Click(object sender, EventArgs e)
{
System.Console.WriteLine("★A:" + Handle.ToString()); // ★A
hogeService.Test1(Handle);
hogeService.Test2(Handle);
System.Console.WriteLine("★D:" + Handle.ToString()); // ★D
}
}
}
//インターセプタ
namespace Seasar.S2FormExample.Forms.Interceptor
{
public class ConsoleWriteInterceptor : IMethodInterceptor
{
public object Invoke(IMethodInvocation invocation)
{
MethodBase method = invocation.Method;
Console.WriteLine("メソッドを開始します");
object ret = invocation.Proceed();
Console.WriteLine("メソッドを終了します");
return ret;
}
}
}
//サービス
namespace Seasar.S2FormExample.Logics.Service
{
[Implementation(typeof(HogeServiceImpl))]
public interface IHogeService
{
void Test1(IntPtr h);
void Test2(IntPtr h);
}
}
namespace Seasar.S2FormExample.Logics.Service.Impl
{
public class HogeServiceImpl : IHogeService
{
public void Test1(IntPtr h)
{
System.Console.WriteLine("★B:" + h.ToString()); // ★B
}
[Aspect(typeof(ConsoleWriteInterceptor))]
public void Test2(IntPtr h)
{
System.Console.WriteLine("★C:" + h.ToString()); // ★C
}
}
}
<<実行結果>>
★A:1313154
★B:21142624
メソッドを開始します
★C:21142996
メソッドを終了します
★D:1313154
※期待値は、★C、★Dともに「1313154」です。
<<補足>>
・QuillのTransaction属性を利用した際も、この現象は発生しました。
・S2コンテナを利用したサービスにきりかえた場合や
Quill利用でも、AOPを利用しない(DIのみ)の場合では
このような現象はありませんでした。
以上です。
よろしくお願いいたします。
seasar-dotnet メーリングリストの案内