PaymentManager类型的构造函数包含名称为&#39; paymentMethods&#39;的参数。并键入未注册的List <ipaymentmethod>

时间:2018-05-04 02:41:51

标签: c# dependency-injection simple-injector

我也收到以下错误。这是因为它不是List,如果是,我该怎么纠正呢?

container.RegisterCollection<IPaymentMethod>(new[]
{
    typeof(AuthorizeNetProvider),
    typeof(StripeProvider),
    typeof(PayPalProProvider),
    typeof(PayPalStandardProvider),
    typeof(IntuitProvider),
    typeof(UsaEpayProvider),
    typeof(ITransactProvider),
    typeof(SecureNetProvider),
    typeof(ExposurePayProvider),
    typeof(PayTraceProvider),
    typeof(BraintreeProvider)
});

错误

  

配置无效。为类型IDivisionsService创建实例失败。 PaymentManager类型的构造函数包含名称为&#39; paymentMethods&#39;的参数。并输入List&lt; IPaymentMethod&gt;那是没有注册的。请确保列出&lt; IPaymentMethod&gt;已注册,或更改PaymentManager的构造函数。

构造器

public PaymentManager(List<IPaymentMethod> paymentMethods)
{
    _paymentMethods = paymentMethods;
}

1 个答案:

答案 0 :(得分:0)

List<T> currently不支持作为集合类型。将构造函数更改为以下之一:

  • IEnumerable<T>
  • IList<T>
  • ICollection<T>
  • IReadOnlyList<T>
  • IReadOnlyCollection<T>
  • T []

前5种类型具有以下行为:

  • 它们表现为 streams ,这意味着它们每次迭代时都会从容器中解析实例。
  • 因此,他们将自己注入单身。然而,他们的情况仍然根据他们的适当生活方式得到解决。
  • 他们是不可改变的。尝试添加,更改或删除IList<T>ICollection<T>中的实例将失败,但会有例外。

最后一个类型(数组)始终表示实例的副本,并且不会表现为流。因为它是一个可变的实例列表,所以数组总是被注入Transient,即使它的依赖项列表都代表Singleton个实例。