Я хочу добавить коллекцию элементов конфигурации в конструкторы через Unity.Устранение и регистрация массива элементов в Unity
Вот пример, иллюстрирующий то, что я в настоящее время есть, что не удается вставить массив я надеялся в мой конструктор:
class ArgumentType
{
public ArgumentType(string p1) { _p1 = p1; }
private string _p1;
public string P1 { get { return _p1; } }
}
class ConsumingType : IConsumingType /* interface omitted here */
{
public ConsumingType(ArgumentType[] myArguments)
{
...
}
}
class Application
{
private UnityContainer _container;
public static void Main()
{
_container = new UnityContainer()
_container.RegisterType<ArgumentType[]>(new InjectionFactory(c => {
return new ArgumentType[] {
new ArgumentType("Foo"),
new ArgumentType("Bar"),
new ArgumentType("Baz") };));
_container.RegisterType<IConsumingType, ConsumingType>();
var myUsefulThing = _container.Resolve<IConsumingType>();
/* Do useful stuff */
}
}
Все ответы я нахожу для поисковых терминов, как «Инъекция массив объектов с использованием Unity "находят примеры, когда Unity возвращает массив из различных реализаций интерфейса, например Injecting arrays with Unity
Я знаю, что есть нагрузки примеров на сайте MSDN (например https://msdn.microsoft.com/en-us/library/ff660882(v=pandp.20).aspx#config_array_runtime), но я ничего такого, что действительно покрывает мой случай использования не найти. Я также хочу сделать это только в коде (не в app.config
).
Очевидным обходным решением, если это не удается, является создание типа для хранения моего массива - это было бы достаточно простым решением, но я уверен, что это должно быть возможно с InjectionFactory
или InjectionConstructor
, или один из их братья и сестры.
Хорошо, у этого есть заслуга. Но компилятор не может преобразовать 'ArgumentType' в параметр' InjectionMember', необходимый для этой перегрузки 'RegisterInstance'. Должен ли объект ArgumentType быть завернут в «InjectionConstructor» или аналогичный? – CJBrew
На самом деле это именно то, что нужно. '_container.RegisterInstance ("Foo", новый InjectionConstructor ("Foo"));' не Если он работает на моем коде приложения реальной жизни, вы получите зеленый тик :) –
CJBrew
@CJBrew RegisterInstance не нуждается для InjectionMember вы регистрируете экземпляры. Я думаю, вы смешиваете это с RegisterType. Но вы также можете использовать RegisterType («Foo», новый InjectionConstructor («Foo»)); –
Jehof