Возврат LightInject GetInstance, который нельзя использовать с аргументами типа

Я новичок в внедрении зависимостей, и я нахожу LightInject для запуска. Поэтому я создал 2 интерфейса и реализовал эти интерфейсы в 2 класса. Теперь я хочу получить экземпляр Payment, но компилятор продолжает говорить, что необщий метод ServiceContainer.GetInstance(Type) нельзя использовать с аргументами типа.

Мои интерфейсы реализованы в разных файлах. Я пробовал так, как говорят эти ребята (Начало работы с LightInject), и все работает нормально. Но я думаю, почему-то, поскольку мои интерфейсы и классы находятся в разных файлах, это не работает, я не знаю почему.

Мои коды такие. IКонтракт

namespace ConsoleApp1.Interfaces
{
    public interface IContract
    {
        int Discount();
    }
}

IP-оплата:

namespace ConsoleApp1.Interfaces
{
    public interface IPayment
    {
        void Pay();
    }
}

Сумасшедший контракт:

namespace ConsoleApp1.Classes
{
    public class CrazyContract: IContract
    {
        public int Discount()
        {
            return 3;
        }
    }
}

Оплата и более важный класс:

namespace ConsoleApp1.Classes
{
    public class Payment: IPayment
    {
        private readonly IContract _contract;

        public Payment(IContract contract)
        {
            _contract = contract;
        }

        public void Pay()
        {
            Console.WriteLine("Discount {0}", _contract.Discount());
        }
    }
}

и мой основной, который возвращает ошибку:

using ConsoleApp1.Classes;
using ConsoleApp1.Interfaces;
using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var container = new LightInject.ServiceContainer();

            container.Register<IPayment, Payment>();
            container.Register<IContract, CrazyContract>();

            var p = container.GetInstance<IPayment>(); // the error is here

        }
    }
}

и ошибка:

error CS0308: The non-generic method 'ServiceContainer.GetInstance(Type)' cannot be used with type arguments

Как вы, ребята, видите, я использую Constructor Injection, и я был бы очень рад, если бы кто-нибудь из вас мог объяснить, что я делаю неправильно. Благодарю вас!


person carlosza    schedule 26.02.2018    source источник


Ответы (1)


Я нахожу способ решить проблему.

Мы должны явно указать, что нам нужен пакет LightInject.

Итак, просто введите этот код

using LightInject;

Я действительно не знаю, почему, но это работает

person carlosza    schedule 26.02.2018
comment
GetInstance<T>, вероятно, является методом расширения, который находится в пространстве имен LightInject. - person Steven; 26.02.2018