2011-10-30 17 views
2

我有,當我的應用程序下面的代碼開始,我通過內核加載一個模塊:如何只是當內核發現它注入屬性

IKernel kernel = new StandardKernel(); 
kernel.Load("*.dll"); 

但在某些情況下,我不希望把模塊組裝在bin文件夾中並且不使用該模塊和它相應的功能。然後我在我的消費者類中使用屬​​性[Inject]屬性。我希望Ninject在找不到它的模塊時爲這些屬性返回null。

回答

2

默認情況下,如果NInject未能找到依賴關係,此代碼將引發異常。

using (IKernel kernel = new StandardKernel()) 
{ 
    kernel.Load("*.dll"); 
    var someClass = kernel.Get<SomeClassWithDependency>(); 
    someClass.TryDoSomething(); 
} 

爲了解決這個問題,只需將Optional屬性添加到屬性:

public class SomeClassWithDependency 
{ 
    public void TryDoSomething() 
    { 
     if (SomeType != null) 
     { 
      SomeType.DoSomething(); 
     } 
    } 

    [Inject, Optional] 
    public ISomeType SomeType { get; set; } 
}