Ninject根本没有注入属性

本文关键字:注入 属性 Ninject | 更新日期: 2023-09-27 18:25:38

我有一个服务项目,用于一些后端工作。我正在尝试创建一个监视器,它显然会监视服务,并确保它们正常工作。我使用web表单作为监视器,Ninject似乎根本不想注入属性(对象返回null)。所以,下面是分解:

在作为数据契约的一种方法所使用的模型中,以下是其代码:

[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; }
}

因此,有许多房产需要填补。这是用于调用以下内容的Interface方法:

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表单上工作?我很困惑。。。

Ninject根本没有注入属性

回答我自己的问题,因为好吧,occam的剃刀,通常最简单的解决方案是正确的。以下是我的发现,我确信其他人也在经历这种情况。如果你看一下代码隐藏文件上的代码,对象正在"尝试"注入的地方:

[Inject]
IUserManagementService Service { get; set; }

这就是它最初的样子。你注意到有什么不对劲吗?在我看来很正常,没有编译错误,也没有任何类型的错误。好吧,经过一段时间的绞尽脑汁,休息一下理清思绪,我得出的结论是,Ninject显然看不到它想注射什么,这是完全合理的!解决方案:

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

公开该成员!一旦公开,Ninject现在可以看到它,并正确地注入它。现在一切都很好。我在其他地方看到过其他几条帖子,说人们有这个问题,并且没有公开要注射的项目。我新手犯的错误。