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表单上工作?我很困惑。。。
回答我自己的问题,因为好吧,occam的剃刀,通常最简单的解决方案是正确的。以下是我的发现,我确信其他人也在经历这种情况。如果你看一下代码隐藏文件上的代码,对象正在"尝试"注入的地方:
[Inject]
IUserManagementService Service { get; set; }
这就是它最初的样子。你注意到有什么不对劲吗?在我看来很正常,没有编译错误,也没有任何类型的错误。好吧,经过一段时间的绞尽脑汁,休息一下理清思绪,我得出的结论是,Ninject显然看不到它想注射什么,这是完全合理的!解决方案:
[Inject]
public IUserManagementService Service { get; set; }
公开该成员!一旦公开,Ninject现在可以看到它,并正确地注入它。现在一切都很好。我在其他地方看到过其他几条帖子,说人们有这个问题,并且没有公开要注射的项目。我新手犯的错误。