2

私は依存性注入が初めてで、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

ご覧のとおり、私はコンストラクター インジェクションを使用しています。誰かが私が間違っていることを説明していただければ幸いです。ありがとうございました!

4

1 に答える 1