私は依存性注入が初めてで、LightInject を開始することがわかりました。そこで、2 つのインターフェースを作成し、それらのインターフェースを 2 つのクラスに実装しました。今、Payment のインスタンスを取得したいのですが、コンパイラは、非ジェネリック メソッド 'ServiceContainer.GetInstance(Type) は型引数では使用できないと言い続けています。
私のインターフェースは別のファイルに実装されています。私はこの人が言う方法を試しました ( LightInject の使用を開始する) が正常に動作します。しかし、どういうわけか、インターフェイスとクラスが別のファイルにあるため、機能していないと思います。理由はわかりません。
私のコードはこのようなものです。IContract
namespace ConsoleApp1.Interfaces
{
public interface IContract
{
int Discount();
}
}
お支払い:
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
ご覧のとおり、私はコンストラクター インジェクションを使用しています。誰かが私が間違っていることを説明していただければ幸いです。ありがとうございました!