Я новичок в внедрении зависимостей, и я нахожу 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, и я был бы очень рад, если бы кто-нибудь из вас мог объяснить, что я делаю неправильно. Благодарю вас!