代码之家  ›  专栏  ›  技术社区  ›  dnndeveloper

统一解决多个类

  •  9
  • dnndeveloper  · 技术社区  · 14 年前

    如何让microsoft unity为给定的接口类型“构造”类列表。

    非常简单的例子:

      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)
      }
    

    谢谢你!

    2 回复  |  直到 13 年前
        1
  •  13
  •   Stephan    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只返回命名注册。

        2
  •  11
  •   Anders    14 年前

    不需要将容器作为参数,使用上述名称注册具体类型,然后在构造函数中添加数组作为参数,IList或泛型枚举不起作用。

    public MyConstructor(IMyType[] myTypes)