Регистрация коллекции: не найдена регистрация для типа MyInterfaceType - PullRequest
0 голосов
/ 04 марта 2019

Я исследую SimpleInjector, чтобы использовать его в моем проекте.Ниже приведен мой код, где я получаю исключение:

class Program
{
    static void Main(string[] args)
    {
        var container = new Container();

        //Case 1:
        container.Collection.Register(typeof(IService<>), new[] { typeof(IService<>).Assembly });

        //Case 2:
        //container.Register<IService<int>, FirstService>();

        var dbService = container.GetInstance<IService<int>>();

        System.Console.WriteLine(dbService.Name);
        System.Console.WriteLine(dbService.Value);
    }
}

public interface IService<T>
{
    string Name { get; }
    T Value { get; }
}

public class FirstService : IService<int>
{
    public int Value => 12343;
    public string Name => "First Service";
}

Я получаю исключение в случае 1. Случай 2 работает хорошо.

Детали исключения:

НеобработанныеИсключение: SimpleInjector.ActivationException: не найдена регистрация для типа IDatabaseConnectionService.Однако есть регистрация для IEnumerable ;Вы хотели вызвать GetAllInstances () или зависеть от IEnumerable ?

    at SimpleInjector.Container.ThrowMissingInstanceProducerException(Type serviceType)
    at SimpleInjector.Container.GetInstanceForRootType[TService]()
    at SimpleInjector.Container.GetInstance[TService]()
    at NetCore.Console.ServiceProvider.Resolve[TService]() in C:\Users\pvha\source\repos\PracticeApp\NetCore.Console\ServiceProvider.cs:line 53
    at NetCore.Console.Program.Main(String[] args) in C:\Users\pvha\source\repos\PracticeApp\NetCore.Console\Program.cs:line 8

У меня есть несколько интерфейсов, каждый из которых реализован одним классом.

Чтонаилучший способ зарегистрировать эти интерфейсы с их реализацией?

...