LightInject GetInstance返回不能与类型参数一起使用

时间:2018-02-26 00:00:08

标签: c# dependency-injection inversion-of-control light-inject

我是依赖注入的新手,我发现LightInject开始了。 所以我创建了2个接口,并将这些接口实现为2个类。现在,我想获得一个Payment实例,但编译器一直说非泛型方法'ServiceContainer.GetInstance(Type)不能与类型参数一起使用。

我的界面在不同的文件中实现。我尝试了这些人说的方式(Getting Started with LightInject)并且工作正常。但我想,不知怎的,因为我的接口和类在不同的文件中,它不起作用我不知道为什么。

我的代码是这样的。 IContract

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

IPayment:

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

CrazyContract:

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

付款和更重要的classe:

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());
        }
    }
}

和我的main返回错误:

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,如果你们中的任何一个人能解释我做错了什么,我会非常高兴。谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。

我们应该明确地说我们需要LightInject包。

所以,只需输入此代码

using LightInject;

我真的不知道为什么,但这有效