3

我的项目中有一个 Web 服务,用于将 json 数据返回给 ajax 调用。

注入我的 ClientService 在常规页面上工作正常,但我如何让它在 Web 服务中工作?

NinjectWebCommon.cs:

 private static void RegisterServices(IKernel kernel)
        {
            kernel.Bind<IClientService>().To<ClientService>();
        }  

Default.aspx.cs:有效!

public partial class _Default : System.Web.UI.Page
    {
 [Inject]
        public IClientService clientService { get; set; } 

MyWebservice.asmx:NullReferenceException(clientService 为空)

 public class MyWebService: System.Web.Services.WebService
    {     
        [Inject]
        public IClientService clientService { get; set; } 


 [WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public MyObject GetClients(int id)
        {
            var list = clientService.GetClients(id);
4

2 回答 2

7

我已经解决了这个问题。我将 MyWebService 类更改为派生自Ninject.Web.WebServiceBase

public class MyWebService: WebServiceBase
于 2014-02-04T19:14:02.833 回答
1

我遇到了同样的问题。我花了一段时间才弄清楚。我对这个问题的解决方案是在Global.asax中添加内核的静态 Ninject 实例化:

  public class Global : NinjectHttpApplication 
    {
        private static Ninject.IKernel kernel = new Ninject.StandardKernel();

        protected override Ninject.IKernel CreateKernel()
        {

            //Business TI
            kernel.Bind<IYourService>().To<YourService>();

            return kernel;
        }
}

通过访问NinjectHttpApplication 的上下文,可以直接从单例(公共)或我选择的解决方案中获取它://在 webservice 无参数构造函数中

yourService = ((NinjectHttpApplication)HttpContext.Current.ApplicationInstance).Kernel.Get<IPublicationService>(); 

这是使用遗留 asmx Web 服务的解决方案,抛开

于 2021-11-17T10:47:40.803 回答