2014-10-03 69 views
0

我有這個服務項目,用於一些後端工作。我試圖創建一個監視器,顯然將監視服務,並確保他們正在按照他們的工作。我爲監視器使用了Web窗體,而Ninject似乎根本不想注入屬性(對象返回爲空)。所以,這裏的故障:Ninject根本不注入屬性?

在該活動正用於一個方法作爲datacontract模型,這裏是該代碼:

[DataContract] 
public class UserSummary 
{ 
    public UserSummary(); 
    public UserSummary(User user); 

    [DataMember] 
    public AccountStatusValue AccountStatus { get; set; } 
    [DataMember] 
    public AudienceValue Audience { get; set; } 
    [DataMember] 
    public string EmailAddress { get; set; } 
    [DataMember] 
    public int ID { get; set; } 
    [DataMember] 
    public Guid Identifier { get; set; } 
    [DataMember] 
    public Name Name { get; set; } 
    [DataMember] 
    public string Username { get; set; } 
} 

所以有一些屬性的存在填補。下面是活動正用於調用這個接口方法:

UserSummary GetUserSummaryInternal(string username); 

我確實有建立正常(一切工作)的其他部分,只是想獲得一個監視器爲它去。現在,這裏是背後的Web表單代碼:

partial class ServicesMonitor : System.Web.UI.MasterPage 
{ 
    [Inject] 
    IUserManagementService Service { get; set; } 
    public ServicesMonitor(IUserManagementService service) 
    { 
     this.Service = service; 
    } 
    public ServicesMonitor() 
    { 

    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     UserSummary summary = Service.GetUserSummaryInternal("testing993"); 
     string message = "Up"; 

     Response.Write(message); 
     Response.End(); 
     return; 
    } 
} 

,因爲我無法獲得Ninject工作爲它有沒有代碼更後面的代碼現在。我嘗試了各種不同的方式,使用[Inject]標籤,不使用它,有構造函數等等。我也有我在模塊中使用的接口的正確綁定,就像我之前說過的,適用於正在使用這項服務庫中的應用很好,我還添加了一個結合在App_Start文件夾中的NinjectWebCommon文件,但仍無濟於事:

private static void RegisterServices(IKernel kernel) 
    { 
     kernel.Bind<ServiceLibrary.Service.IUserManagementService>().To<ServiceLibrary.Service.UserManagementService>(); 
     kernel.Bind<ServiceLibrary.Service.IIntegrationService>().To<ServiceLibrary.Service.IntegrationService>(); 
     kernel.Load(new List<string> { "ServiceLibrary.dll" }); 
    } 

。 Ninject如何不能在服務庫項目中的單個aspx web窗體上工作?我很困惑...

+0

您是否已將'Ninject.Web'包添加到您的Web項目中? – 2014-10-03 17:14:35

+0

是的。我在這個解決方案的其他幾個地方使用ninject,並且在其他地方工作正常,僅僅因爲某些原因它不想在webform中注入屬性... – Skrubb 2014-10-03 17:24:05

回答

1

回答我自己的問題,因爲好吧,奧卡姆的剃鬚刀,往往是最簡單的解決方案是正確的。所以這裏是我發現的,我很確定其他人也在遇到這種情況。如果你看看在代碼隱藏文件,在對象爲「努力」的代碼被注入:

[Inject] 
IUserManagementService Service { get; set; } 

這就是它看起來像最初。你有沒有注意到任何不妥之處?看起來很平常,沒有編譯錯誤,也沒有任何錯誤。好吧,在我的腦子裏呆了一段時間,並休息一下以清除我的思想後,我得出結論,Ninject顯然無法看到它想要注入什麼,這是非常有意義的!解決辦法:

[Inject] 
public IUserManagementService Service { get; set; } 

請將會員公開!一旦公開,Ninject現在可以看到它,並正確地注入它。一切都很好。我在其他地方看過其他一些帖子,說人們有這個問題,並沒有讓這個項目被公開註冊。那裏有我的菜鳥錯誤。