Unity поддерживает работу с generic-типами. 
Можно в контейнер поместить обобщенный тип,  а потом запросить тип с конкретными параметрами.  Подробнее описано по ссылке http://msdn.microsoft.com/en-us/library/dd203156.aspx

Пример кода, использующего такую фичу.

Рассмотрим обобщенный класс репозитария для работы с данными

public interface IRepository<T>
{
    IQueryable<T> Items();
    void Save(T item);
    void Delete(T item);
}

Реализация этого интерфейса для Entity Framework

public class EFRepository<T> : IRepository<T> where T : EntityObject
{
    ObjectContext _context;
    string _entitySetName;

    public EFRepository(ObjectContext context)
    {
        _context = context;
        var container = _context
            .MetadataWorkspace
            .GetEntityContainer(
                _context.DefaultContainerName, 
                DataSpace.CSpace);
        var edmEntityType = (EdmEntityTypeAttribute)typeof(T)
            .GetCustomAttributes(
                typeof(EdmEntityTypeAttribute), 
                false)
            .Single();

        _entitySetName = container.BaseEntitySets
            .Single(s => s.ElementType.Name == edmEntityType.Name
                && 
                s.ElementType.NamespaceName == edmEntityType.NamespaceName)
            .Name;
    }

    public IQueryable<T> Items()
    {
        return _context.CreateQuery<T>(_entitySetName);
    }

    public void Save(T item)
    {
        switch (item.EntityState)
        {
            case System.Data.EntityState.Detached:
                _context.AddObject(_entitySetName, item);
                goto case System.Data.EntityState.Added;

            case System.Data.EntityState.Added:
            case System.Data.EntityState.Modified:
                _context.SaveChanges();
                break;
            default:
                break;
        }
    }

    public void Delete(T item)
    {
        _context.DeleteObject(item);
        _context.SaveChanges();
    }
}

Есть EF модель с типом контекста  AddressBookEntities и двумя сущностями Person и PhoneNumber и сервис SomeService1, работающий с этими сущностями.
Конструктор сервиса выглядит так:

public SomeService1(IRepository<Person> personsRepository, 
                    IRepository<PhoneNumber> phoneNumbersRepository)
{

}

Чтобы получить от Unity экземпляр сервиса можно написать такой код:

var container = new UnityContainer();
container
    .RegisterType<ObjectContext, AddressBookEntities>(
            new ContainerControlledLifetimeManager(),
            new InjectionConstructor())
    .RegisterType(typeof(IRepository<>), typeof(EFRepository<>));

var service = container.Resolve<SomeService1>();

Unity сам создаст инстансы конкретных типов при сборке зависимостей SomeService1.

Теги : Unity, .NET, IoC-контейнер