10

マイクロソフトユニティを取得して、特定のインターフェイスタイプのクラスのリストを「構築」するにはどうすればよいですか。

非常に簡単な例:

  List<IShippingCalculation> list = new List<IShippingCalculation>();
  list.Add(new NewYorkShippingCalculation());
  list.Add(new FloridaShippingCalculation());
  list.Add(new AlaskShippingCalculation());

  //Not What I want
  public void calcship(List<IShippingCalculation> list)
  {
    var info = new ShippingInfo(list);
    info.CalculateShippingAmount(State.Alaska)
  }

  //Somehow in unity, must i do this for all the concrete classes? 
  //how does it know to give a list.
  Container.RegisterType<IShippingInfo,new AlaskaShippingCalculation()>();??

  //What I want
  public void calcship(IShippingInfo info)
  {
    info.CalculateShippingAmount(State.Alaska)
  }

ありがとうございました!

4

2 に答える 2

14

Unity 2を使用している場合は、次を使用できますResolveAll<T>

Container.RegisterType<IShippingInfo,FloridaShippingCalculation>("Florida");
Container.RegisterType<IShippingInfo,NewYorkShippingCalculation>("NewYork");
Container.RegisterType<IShippingInfo,AlaskaShippingCalculation>("Alaska");

IEnumerable<IShippingInfo> infos = Container.ResolveAll<IShippingInfo>();

ResolveAllは名前付きの登録のみを返すため、すべての登録に名前を付ける必要があります。

于 2010-11-17T17:09:34.383 に答える
11

コンテナーをパラメーターとして持つ必要はなく、上記のように具体的な型を名前で登録してから、コンストラクターで配列をパラメーターとして追加すると、IListまたはジェネリック列挙型は機能しません。

public MyConstructor(IMyType[] myTypes)
于 2011-02-09T09:02:15.713 に答える