سؤال

كيف أحصل على وحدة Microsoft "بناء" قائمة الفئات لنوع واجهة معين.

مثال بسيط جدا:

  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 يمكنك استخدامها ResolveAll<T>

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

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

عليك أن تعطي اسمًا لكل تسجيل لأن SoloLveall لن يعيد سوى التسجيلات المسماة.

نصائح أخرى

لا تحتاج إلى أن يكون لديك الحاوية كمعلمة ، وتسجيل أنواع الخرسانة بأسماء كما هو مذكور أعلاه ، ثم في المُنشئ إضافة صفيف حيث لا يعمل المعلمة أو التعداد العام أو العام العام.

public MyConstructor(IMyType[] myTypes)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top