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 或泛型 Enum 不起作用。

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