[seasar-dotnet:420] Re: S2AOP.NET でinstance=sessionのコンポーネントでAOPが効かない
Kazuya Sugimoto
sugimotokazuya @ gmail.com
2006年 12月 15日 (金) 01:41:00 JST
杉本です。
くろいわさん、こんばんは。
遅くなってしまいました。
申し訳ございません。テスト環境を作成して調査していたのですが、
再現しました。バグです。
お急ぎだと思いますので、とりあえず以下のクラスを変更していただけないでしょうか?
Seasar.Framework.Container.Deployer.SessionComponentDeployer
Deployメソッドの object component = session[componentName];以下を
下のように変更してください。
object component = session[componentName];
if(component != null) return component;
component = this.ConstructorAssembler.Assemble();
this.PropertyAssembler.Assemble(component);
this.InitMethodAssembler.Assemble(component);
object proxy = GetProxy(receiveType);
component = proxy == null ? component : proxy;
session[componentName] = component;
return component;
ただし簡単なテストしか行えておりませんので、変更後のテストは十分に
行って下さい。
# requestスコープの場合でも同じバグがあり、request中であれば1回目しか
# Aspectがかかりません。同様の修正が必要です。
06/12/14 に tomoaki.kuroiwaさん さんは書きました:
>
>
> はじめまして、くろいわと申します。
> いつも大変お世話になっております。
>
> S2AOP.NETをASP.NETにて使用しています。S2AOP.NETについて質問です。
> App.diconで定義したinstance=sessionと設定したコンポーネントを、aspx.csの
> Page_Load()上で取得しています。
> このコンポーネントですが、1回目取得したときはAOPのプロキシオブジェクトが
> 返ってくるようなのですが、
> 2回目以降は実体のオブジェクトの方が返って来てしまいます。なのでAOPが効きま
> せん。
> (ブラウザの再読込みボタンで確認しました。セッションは維持できています。)
>
> AOPでロギングしているため、毎回プロキシオブジェクトの方を取得する必要があり
> 困っています。
> どうすれば解決できるのかアドバイス頂けませんでしょうか。
>
> ■App.dicon
> <?xml version="1.0" encoding="utf-8" ?>
> <components>
> <component name="echo" class="Hello" instance="session">
> <property name="Session">session</property>
> <aspect pointcut=".*">measurement</aspect>
> </component>
> <component name="measurement" class="MeasurementInterceptor" />
> </components>
>
>
> ■aspx.cs
> protected void Page_Load(object sender, EventArgs e)
> {
> Response.Cache.SetCacheability(HttpCacheability.NoCache);
>
> IHello hello =
> (IHello)SingletonS2ContainerFactory.Container.GetComponent(typeof(IHello),
> "echo");
> string msg = string.Empty;
>
> if(hello is Hello) //1回目はfalseになる。2回目以降はtrueになる
> {
> msg = "プロキシじゃないです";
> }
> else
> {
> msg = "プロキシです";
> }
> Label1.Text = hello.Echo("こんにちは") + " " + msg;
> }
>
>
> 現在の環境は以下の通りです。
> VB2005、ASP.NET2.0(C#)、S2Container.NET 1.2.7
> S2AOP.NETは標準実装を利用しています。
>
> カットオーバー間際に、はまっております。
> どうぞ、よろしくお願いいたします。
>
> くろいわ
--
Kazuya Sugimoto
http://d.hatena.ne.jp/sugimotokazuya/
seasar-dotnet メーリングリストの案内