Uploaded image for project: 'S2Container.NET'
  1. S2Container.NET
  2. CONTAINERNET-107

QuillでHashMapを使ってインジェクションできるようにする

XMLWordPrintable

    • Type: Icon: Improvement Improvement
    • Resolution: Fixed
    • Priority: Icon: Major Major
    • 1.3.14
    • Affects Version/s: 1.3.13
    • Component/s: Quill
    • None
    • Environment:
      .NET Framework 2.0~

      Quillでインジェクションを行いたい場合、
      Implementation属性を使用するが、
      もう一種HashMapを使ってインジェクションする方法を追加したい。

      目的
      ・Quill用として作られていないクラス(別プロダクトやSeasarの既存クラス、インターフェース)も
       Quillコンポーネントとして扱えるようにする
      (必ずシングルトン、コンストラクタ引数なしのみ、というルールはそのまま)
      ・テスト用と本番用の使用コンポーネントをより切り替えやすくする

      具体的にはQuillInjector#Injectに下記のようなオーバーロードを追加する。
      QuillInjector#Inject(object target, InjectionMap injectionMap)

      InjetionMapはシングルトンとして作成。
      中身はIDictionary<Type, Type>。キーがinterfaceの型、値が実装型。
      +Add(Type interfaceType, Type implType) // Implementation(typeof(XXX))と同じ意味
      +Add(Type componentType) // Implementationと同じ意味
      追加したキーが重複した場合は専用例外を投げる。

      QuillInjector#InjectionMapに設定すると
      InjectionMapのキーに該当するものがあれば
      Implementation属性が設定されていなくても
      その値を使ってインジェクションを行う。

      インジェクションの優先度は下記のようにする予定
      1.S2Container (dicon) (Binding属性使用)
      2.InjectionMap
      3.Implementation属性

      InjectionMapをImplementationより優先させているのは
      テストのときはInjectionMap、本番はImplementation属性を使用して
      きっちり分ける、という使い方もアリと考えたため。

      ○修正方法
      QuillInjectorにメソッドを追加する形で行う予定。

      QuillInjectorを継承して別クラス・・・というのも考えたが
      インジェクションの方法でユーザが使うクラスまで変えるのは
      使う側にとってわかりにくくなる可能性が高いのでこちらの方法で。

            Assignee:
            koyak koyak
            Reporter:
            koyak koyak
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: