[seasar-dotnet:1323] Re: Quill:フォームへのインジェクションがうまく行かない

koyak [E-MAIL ADDRESS DELETED]
2009年 5月 30日 (土) 18:28:29 JST


小林さん、萩野さん

小谷(koyak)です。

現バージョン(1.3.15)では萩野さんがおっしゃる方法
(Injectメソッドの前にClearInjectedを呼ぶ)
が最善の回避方法だと思います。

その他に後述の理由により下記の対応も考えられます。
・一つ前のバージョン(1.3.14)に戻す
・最新のソースコード(revision:1127)をSubversionで取得し、
 コンパイルしたものを使用する(1.3.16がリリースされたらそちらに移行)。

>前はこのメソッドがなかったような気がするのですが、
>私の知らない間に追加されていました。

https://www.seasar.org/issues/browse/CONTAINERNET-120
の対応として1.3.15に入った修正になりますが、
リリース内容からもれてしまっていますね。
申し訳ありません。

https://www.seasar.org/svn/s2container.net/trunk/s2container.net/
から取得できる最新のソースコード(revision:1127)にてこの問題には
対応済です。
お急ぎの場合はそちらをご利用下さい。


2009/05/29 19:31 に taknb2nch<[E-MAIL ADDRESS DELETED]> さんは書きました:
> 初めまして、こんにちは。
> 萩野と申します。
>
> >小林さん
> 少し前に同じことではまりました。
> まず私がとった方法ですが、
>
> Seasar.Quill.QuillInjector injector = Seasar.Quill.QuillInjector.GetInstance();
> injector.ClearInjected();
> injector.Inject(this);
>
> とすることで回避することができました。
>
> ただこれが正しい方法かどうかは私には判断できないので、
> ご存知のかたフォローをお願いします。
>
>
> ソースを見る限り、
> 原因としてはQuillInjectorが一度Injectした「型」を保持しているようで、
> newしたインスタンスをInjectしようとしても、
> 既に一度Injectしている「型」としてInjectされずにreturnされています。
>
> ClearInjectedメソッドを呼ぶことにより、
> この保持している「型」情報をクリアすることができ、
> 期待どおりInjectされます。
>
>
> 前はこのメソッドがなかったような気がするのですが、
> 私の知らない間に追加されていました。
>
> ソースのコメントを読めば"なるほど"なのですが。。。
>
>
>
> 2009/05/29 15:31 小林貴生 <[E-MAIL ADDRESS DELETED]>:
>> いつもお世話になっております。
>> 以前も質問させて頂いた小林と申します。
>>
>>
>> 今回も質問がありまして、メールさせて頂きました。
>>
>> Quill(Seasar.NET) 1.3.15
>> VisualStudio2008
>> です。
>>
>>
>> 今困っている現象は、フォームへのインジェクションが
>> 1回目は期待通りに行くけれども、2回目以降行かないと言うことです。
>>
>>
>> 以下のようなソースを書いています。
>>
>> インジェクションされるクラス
>> using Seasar.Quill.Attrs;
>>
>> namespace Sample.Hoge.Fuga
>> {
>>    [Implementation]
>>    public class Hello
>>    {
>>        public string GetHello()
>>        {
>>            return "Hello";
>>        }
>>    }
>> }
>>
>> 呼び出すフォーム
>> using System;
>> using System.Windows.Forms;
>>
>> namespace Sample.Hoge.Fuga.Forms
>> {
>>    public partial class ClientForm : Form
>>    {
>>        public ClientForm()
>>        {
>>            InitializeComponent();
>>        }
>>
>>        private void button2_Click(object sender, EventArgs e)
>>        {
>>            PopupForm frm = new PopupForm();
>>            frm.Show();
>>        }
>>    }
>> }
>>
>> 呼び出されるフォーム
>> using System;
>> using System.Windows.Forms;
>>
>> namespace Sample.Hoge.Fuga.Forms
>> {
>>    public partial class PopupForm : Form
>>    {
>>        public PopupForm()
>>        {
>>            InitializeComponent();
>>        }
>>
>>        protected Hello _hello;
>>
>>        private void PopupForm_Load(object sender, EventArgs e)
>>        {
>>            Seasar.Quill.QuillInjector.GetInstance().Inject(this);
>>            MessageBox.Show(_hello.GetHello());
>>        }
>>    }
>> }
>>
>>
>> 上記ソースを実行した場合、
>> 1度目は _hello に値が設定されますが、
>> 2度目以降、null のままでセットされません。
>>
>> 呼び出すフォームで、
>> Seasar.Quill.QuillInjector.GetInstance().Inject(frm);
>> もやってみましたが、ダメでした。
>>
>>
>> フォーム自体をQuill管理することも考えましたが、
>> 同じフォームで違う値を出したいこともあり、new したいな。と考えています。
>>
>>
>> どなたか、上記現象の回避方法をお持ちでしたら、
>> 教えて頂けないでしょうか。
>>
>> 以上、よろしくお願いいたします。
>>
>>
>> 小林貴生
>> _______________________________________________
>> seasar-dotnet mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


seasar-dotnet メーリングリストの案内