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

taknb2nch [E-MAIL ADDRESS DELETED]
2009年 5月 29日 (金) 19:31:31 JST


初めまして、こんにちは。
萩野と申します。

>小林さん
少し前に同じことではまりました。
まず私がとった方法ですが、

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 メーリングリストの案内