Ninject根本没有注入属性?

时间:2014-10-03 16:26:38

标签: c# asp.net .net webforms ninject

我有这个服务项目,用于一些后端工作。我试图创建一个显然会监控服务并确保它们正常运行的监视器。我使用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; }
}

因此有很多属性需要填补。以下是用于调用此方法的接口方法:

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表单上工作?我感到困惑......

1 个答案:

答案 0 :(得分:1)

回答我自己的问题,因为很好,最常见的剃刀,通常最简单的解决方案是正确的。所以这就是我发现的东西,而且我很确定其他人也会遇到这种情况。如果你看一下代码隐藏文件的代码,那么对象就是&#34;尝试&#34;被注射:

[Inject]
IUserManagementService Service { get; set; }

这就是它原来的样子。你注意到有什么不妥吗?对我来说看起来很正常,并且没有编译错误或任何类型的错误。好吧,在绞尽脑汁一段时间后,休息一下让我清醒一下,我得出的结论是,Ninject显然无法看到它试图注入的东西,这是完全合理的!解决方案:

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

让会员公开!一旦公开,Ninject现在可以看到它,并正确地注入它。一切都很好。我在其他地方看过其他一些帖子,人们都有这个问题,而且没有把这个项目公开注入。我那里的菜鸟错误。