繁体   English   中英

Ninject .Net 3.5 SOAP Web服务问题

[英]Ninject .Net 3.5 SOAP Webservice issues

这是我第一次在这里发布信息,请相信我,我在高空搜寻我的问题的答案,但收效甚微。

背景:我目前已经开始尝试重构现有的SOAP Web服务(.Net 3.5),以便使用Ninject进行一些IOC和DI。 我有一个CacheManager,正在尝试在Web方法中启动它,但是注入似乎没有开始。

我有一个控制台应用程序,该应用程序使用以下命令调用网络服务:

static void Main(string[] args)
    {
        TestService service = new CachingService.TestService();

        DataResult result = service.GetSomething(1);
    }

该Web服务如下:TestService.asmx.cs

[WebMethod(Description = "Get something")]
public DataResult GetSomething(int param)
{
    try
    {
        return this.CacheManager.Get();
    }
    catch (Exception ex)
    {
        throw;
    }
}

Base.cs(TestService.asmx.cs继承Base来初始化CacheManager)

public class Base
{
    [Inject]
    public ICacheManager CacheManager
    {
        get
        {
            if (cacheProxy == null)
            {
                cacheProxy = new CacheProxy();
            }
            return cacheProxy.CacheManager;
        }
    }  
}

CacheProxy.cs

public class CacheProxy
{
    [Inject]
    public ICacheManager CacheManager { get; set; }
}

CacheManager.cs

public class CacheManager : ICacheManager
{
   //implements iCacheManager methods
}

App_Start / NinjectWebCommon.cs

private static void RegisterServices(IKernel kernel)
    {
kernel.Bind<ICacheManager>()
            .ToMethod(x => x.Kernel.Get<ICacheManagerFactoryBuilder>().GetCacheManagerFactory().CreateCacheManager())
            .InRequestScope();
}

CacheManagerFactoryBuilder.cs

public class CacheManagerFactoryBuilder : ICacheManagerFactoryBuilder
{
    private ICacheManagerFactory _Factory;

    public CacheManagerFactoryBuilder(ICacheManagerFactory factory)
    {
        _Factory = factory;
    }

    public ICacheManagerFactory GetCacheManagerFactory()
    {
        return _Factory;
    }
}

CacheManagerFactory.cs

public class CacheManagerFactory : ICacheManagerFactory
{
    private readonly ICacheManager Manager;

    public CacheManagerFactory(ICacheManager manager)
    {
        if (this.Manager == null)
        {
            this.Manager = manager;
        }
    }

    public ICacheManager CreateCacheManager()
    {
        return this.Manager;
    }

}  

每次我运行控制台应用程序并点击GetSomething时CacheManager为null。 为什么在我调用Web方法时没有进行注入?

团队的另一名成员最终在另一个线程中偶然发现了这一点:

如何在asp.net Web窗体上实现Ninject或DI?

我所缺少的只是在TestService Web服务类上继承WebServiceBase!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM