Списки классов Generi c, используемые с образцом стратегии - PullRequest
0 голосов
/ 26 февраля 2020

Я хочу использовать обобщенные c классы с шаблоном стратегии вместе с внедрением зависимостей в Asp. net

Определение интерфейса и конкретного класса

public interface IPaymentMethod<T> 
{
   string Name { get; set }
}

public interface PaymentMethod<T> : IPaymentMethod<T> where T: class 
{ 
   public string Name { get; set; }
}

Startup.cs

services.AddScoped(typeof(IPaymentMethod<>), typeof(PaymentMethod<>));

В приложении

public class PaymentResolver 
{
    public PaymentResolver(List<IPaymentMethod<????>> paymentMethods) 
    { ... }

    public IPaymentMethod Resolve(string name)
    {
        return _paymentMethods.FirstOrDefault(item => item.Name == name);
    }
}

Как получить коллекцию экземпляров IPaymentMethod из внедрение зависимости? Метод PaymentResolver.Resolve не является правильным.

1 Ответ

1 голос
/ 26 февраля 2020

То, что вы ищете, является своего рода конфликтом с самим собой. В общем, вы хотите получить услугу, когда знаете ее название. Тогда мой вопрос: если вы знаете имя службы

_paymentResolver.GetPaymentMethod("CreditCard/DebitCard")

, вы также должны знать тип службы

class Invoice
{
 public Invoice(IPaymentMethod<CreditCard> cc, IPaymentMethod<DeditCard> dc) {}
}

Так что же мешает вам использовать тип, а не имя? Не говоря уже о том, что он предлагает вам строго печатать, поэтому вы не рискуете ошибочно набрать название.

Надеюсь, это поможет вам очистить ваш разум.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...