Попытка использовать интерфейс маркера не удалась с IEnumerable<>

Я пытаюсь имитировать некоторые вещи из Orchard CMS в моем собственном приложении, используя Unity...

Хорошо, так что я пытаюсь сделать это...

Допустим, у меня есть интерфейс маркера под названием IDependency.

public interface IDependency{ }

У меня тогда есть несколько интерфейсов, висящих от этого...

public interface ICustomerService : IDependency { }

public interface ICustomerRepository : IDependency { }

а потом еще несколько классов...

public class CustomerService : ICustomerService {
     public CustomerService(ICustomerRepository customerRepo){ }
}

public class SomOtherCustomerService : ICustomerService {
     public CustomerService(ICustomerRepository customerRepo){ }
}

public class NicksController : Controller {
     public NicksController(IEnumerable<ICustomerService> customerServices) { }
}

 public class NicksSecondController : Controller {
     public NicksSecondController(IEnumerable<ICustomerService> customerServices) { }
}

Что у меня так далеко..

var container = new UnityContainer();

container
    .ConfigureAutoRegistration()
    .ExcludeSystemAssemblies()
    //.Include(If.Implements<IDependency>, Then.Register()
    //.As<IDependency>().UsingLifetime<PerResolveLifetimeManager>())
    .Include(t =>
        typeof(IDependency).IsAssignableFrom(t), (type, builder) =>
            {
                builder.RegisterType(type);

                foreach (var interfaceType in type.GetInterfaces()
                .Where(itf => typeof(IDependency).IsAssignableFrom(itf))) {
                    builder = builder.RegisterType(interfaceType, type);
                }
            })
    .ApplyAutoRegistration();

Я падаю на введение IEnumerable в мой NicksSecondController... Есть идеи?

Ура, Ник

1 ответ

Решение

Из коробки Unity знает, как разрешать массивы. Взгляните на проект TecX на codeplex. Он содержит собственное расширение, которое учит контейнер обрабатывать IEnumerable<T>, IList<T> а также ICollection<T> также. Код можно найти в TecX.Unity (папка Collections).

Другие вопросы по тегам