我有这个服务项目,用于一些后端工作。我试图创建一个显然会监控服务并确保它们正常运行的监视器。我使用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表单上工作?我感到困惑......
答案 0 :(得分:1)
回答我自己的问题,因为很好,最常见的剃刀,通常最简单的解决方案是正确的。所以这就是我发现的东西,而且我很确定其他人也会遇到这种情况。如果你看一下代码隐藏文件的代码,那么对象就是&#34;尝试&#34;被注射:
[Inject]
IUserManagementService Service { get; set; }
这就是它原来的样子。你注意到有什么不妥吗?对我来说看起来很正常,并且没有编译错误或任何类型的错误。好吧,在绞尽脑汁一段时间后,休息一下让我清醒一下,我得出的结论是,Ninject显然无法看到它试图注入的东西,这是完全合理的!解决方案:
[Inject]
public IUserManagementService Service { get; set; }
让会员公开!一旦公开,Ninject现在可以看到它,并正确地注入它。一切都很好。我在其他地方看过其他一些帖子,人们都有这个问题,而且没有把这个项目公开注入。我那里的菜鸟错误。