我是依赖注入的新手,我发现可以开始使用LightInject。
因此,我创建了2个接口,并将这些接口实现为2个类。现在,我想获得一个Payment的实例,但是编译器一直在说,非泛型方法'ServiceContainer.GetInstance(Type)不能与类型参数一起使用。
我的界面在不同的文件中实现。我尝试了这些家伙说的方式(Getting Started with LightInject),并且工作正常。但是我认为,由于某种原因,由于我的接口和类位于不同的文件中,所以我不知道为什么它不起作用。
我的代码是这样的。合同
namespace ConsoleApp1.Interfaces
{
public interface IContract
{
int Discount();
}
}
IPayment:
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
你们可以看到,我正在使用构造函数注入,如果你们中的任何一个可以解释我做错了的事,我将非常高兴。谢谢!
最佳答案
我找到一种解决问题的方法。
我们应该明确地需要包LightInject。
所以,只需输入这段代码
using LightInject;
我真的不知道为什么,但这有效