我有以下獲得 IPersonOrderingStrategy[] 的類:
public class PersonCollection : IPersonCollection
{
private IDictionary<int, IPerson> _persons;
private IPerson _maxOrMinPerson;
private readonly IPersonOrderingStrategy[] _personOrderingStrategies;
private string _propertyName { get; set; }
private string _maxMinOrdering { get; set; }
public PersonCollection(IPersonOrderingStrategy[] personOrderingStrategies)
{
_persons = new Dictionary<int, IPerson>();
_personOrderingStrategies = personOrderingStrategies;
}
我注冊了所有課程:
public void ConfigureServices()
{
_serviceColletcion.AddTransient<IPerson, Person>();
_serviceColletcion.AddTransient<IPersonCollection, PersonCollection>();
_serviceColletcion.AddTransient<IPersonOrderingStrategy, MaximumPersonsOrdering>();
_serviceColletcion.AddTransient<IPersonOrderingStrategy, MaximumPersonsOrdering>();
_serviceColletcion.AddTransient<IPersonFactory, PersonFactory>();
_serviceProvider = _serviceColletcion.BuildServiceProvider();
}
當我要解決 IPersonCollection 時:
{
var personCollection = _applicationServices.Resolve<IPersonCollection>();
}
我收到以下錯誤:嘗試激活“BusinessComponent.Person.PersonCollection”時無法決議“Model.Person.IPersonOrderingStrategy[]”型別的服務
我的決議器如下所示:
public T Resolve<T>()
{
return (T)_serviceProvider.GetService(typeof(T));
}
我究竟做錯了什么?
uj5u.com熱心網友回復:
我假設您正在使用Microsoft.Extensions.DepencyInjection.
支持注入所有T使用的實作,IEnumerable<T>而不是T[]. 這是 DI 庫的設計選擇。
將您的建構式更改為
public PersonCollection(IEnumerable<IPersonOrderingStrategy> personOrderingStrategies)
{
_persons = new Dictionary<int, IPerson>();
_personOrderingStrategies = personOrderingStrategies.ToArray();
}
請參閱https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection#service-registration-methods
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/524203.html
