基本依赖注入问题

时间:2014-12-16 22:39:50

标签: c# asp.net-web-api dependency-injection ninject

我正在尝试依赖注入我的Job类中的存储库(使用Ninject):

public class Job
{
    IRepository _repo;
    public Job(IRepository repo)
    {
        _repo = repo;
    }

    public void Save()
    {
        repo.SaveJob(this);
    }
}

我现在的问题是我需要从另一个类实例化Job类。 如何在依赖注入存储库时创建它? 我的意思是构造函数需要一个存储库。

2 个答案:

答案 0 :(得分:0)

假设您在以下课程中实施了IRepository

public class MyFirstRepo : IRepository
{
   // Implement IRepository
}

public class MySecondRepo : IRepository
{
   // Implement IRepository
}

然后这是你实例化的方式

MyFirstRepo firstRepo = new MyFirstRepo();
Job myJob1 = new Job(firstRepo);

MySecondRepo secondRepo = new MySecondRepo();
Job myJob2 = new Job(secondRepo);

<强>更新

如何使用Ninject实例化

您需要在项目中添加对Ninject.dll程序集的引用,并在项目中创建一个单独的类,Ninject在运行时使用该类来配置依赖项:

using Ninject.Modules;
using Ninject; 
public class Bindings : NinjectModule
{
    public override void Load()
    {
        Bind<IRepository>().To<MyFirstRepo>();
    }
}

您的调用代码(Program.cs)必须使用Ninject来确定要使用的具体实现:

using Ninject;
class Program
{
    static void Main(string[] args)
    {
        IKernel kernel = new StandardKernel();
        kernel.Load(Assembly.GetExecutingAssembly());
        IRepository firstRepo = kernel.Get<IRepository>();

        Job myJob1 = new Job(firstRepo);
        // Now myJob1 is instantiated

        Console.ReadLine();
    }
}

答案 1 :(得分:0)

您需要使用ninject或替代方案来解析依赖关系。在ninject中,将IRepo绑定到Repo和ninject会将具体实现传递给构造函数,而无需显式注入您自己的Repo实现,如上一个答案所示。