2014-10-03 68 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现在可以看到它,并正确地注入它。一切都很好。我在其他地方看过其他一些帖子,说人们有这个问题,并没有让这个项目被公开注册。那里有我的菜鸟错误。