我正在尝试依赖注入我的Job类中的存储库(使用Ninject):
public class Job
{
IRepository _repo;
public Job(IRepository repo)
{
_repo = repo;
}
public void Save()
{
repo.SaveJob(this);
}
}
我现在的问题是我需要从另一个类实例化Job类。 如何在依赖注入存储库时创建它? 我的意思是构造函数需要一个存储库。
答案 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实现,如上一个答案所示。