Zenject - установить универсальную привязку

Добрый день.

У меня есть интерфейс:

public interface IRepository<T>
{
   //Stuff
}

и реализация:

class Repository<T> : IRepository<T>
{
   //Stuff implementation
}

Теперь я хотел бы связать все это вместе в контейнере.

Я обнаружил, что Zenject похож на Ninject synthax, поэтому я попробовал следующее:

public class IoC : MonoInstaller
{
    public override void InstallBindings()
    {
         Container.Bind(typeof(IPersistence<>)).To(typeof(Persistence<>));
    }
}

Это вызывает исключение, когда я пытаюсь проверить сцену (Правка -> Zenject -> Проверить текущие сцены):

Assert hit! Invalid type given during bind command.  
Expected type 'Assets.Sources.Core.Infrastructure.Repository`1[T]' to derive from
type 'IRepository`1'

Поэтому я подозреваю, что это просто неправильный способ сделать общие привязки. Интересно, что является правильным.

1 ответ

Решение

Это была ошибка в Zenject, которая должна быть исправлена ​​с сегодняшнего дня. Теперь вы должны иметь возможность привязывать абстрактные открытые универсальные типы к конкретным открытым универсальным типам, как в вашем примере.

Можете ли вы попробовать обновление из основной ветки репозитория github?

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