Ninject - 跨程序集的依赖注入

时间:2012-06-01 14:07:12

标签: asp.net-mvc ninject

我有一个MVC应用程序引用了六个程序集。每个程序集都具有Web站点的依赖组件。在某些情况下,这些程序集彼此依赖。 这是一些原型

Assembly1
---------
interface ILogger{...}

Assembly2
--------
class MyLogger : ILogger {...}

Assembly3
--------
interface IRepository {.....}

Assembly4
---------
interface MyResository : IRepository
{
 [Inject]
  public ILogger Logger{get;set;}
  ... other methods...
}

MVCApp
------

public HomeController : Controller
{
  [Inject]
   public ILogger Logger{get;set;}
  [Inject]
   public IRepository Repository{get;set;}
}

我已将Di解析的所有Ninject相关代码放在一个单独的程序集中,该程序集引用所有其他项目。

以下是发生的事情。当HomeController被实例化时,我有Logger和Repository属性的有效实例。 Logger没有依赖性,它是完美的。但是当我查看Repository实例时,Logger实例尚未实例化。

在这种情况下如何使用Ninject设置DI?

由于

1 个答案:

答案 0 :(得分:1)

我通过实现IRepository的提供程序解决了这个问题。在CreateInstance中,我通过使用Kernel解析它来实例化Logger属性。

CreateInstance(context)
{
  var repo = new MyRepository();
  repo.Logger = context.Kernel.Get<ILogger>();
}

像魅力一样!