C# Ninject.Net 3.5 SOAP Web服务问题

C# Ninject.Net 3.5 SOAP Web服务问题,c#,asp.net,web-services,.net-3.5,ninject,C#,Asp.net,Web Services,.net 3.5,Ninject,这是我第一次在这里发帖,相信我,我已经到处寻找我问题的答案,但几乎没有成功 背景:我目前已经开始尝试重新考虑现有的SOAPWeb服务(.NET3.5),以便使用Ninject进行一些IOC和DI。我有一个CacheManager,我正试图在web方法中初始化它,但是注入似乎没有起作用 我有一个控制台应用程序,它使用以下命令调用Web服务: static void Main(string[] args) { TestService service = new Caching

这是我第一次在这里发帖,相信我,我已经到处寻找我问题的答案,但几乎没有成功

背景:我目前已经开始尝试重新考虑现有的SOAPWeb服务(.NET3.5),以便使用Ninject进行一些IOC和DI。我有一个CacheManager,我正试图在web方法中初始化它,但是注入似乎没有起作用

我有一个控制台应用程序,它使用以下命令调用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)

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();
}
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;
    }

}  

每次我运行console应用程序时,它点击GetSomethingCacheManager为空。为什么在我调用web方法时注入没有发生?

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


我所缺少的只是在TestServiceWeb服务类上继承WebServiceBase

我目前没有看到您在“return this.CacheManager.Get();”行中调用的CacheManager变量的初始化。如果您正在执行构造函数注入,则应该在构造函数中初始化它。啊,抱歉,我遗漏了初始化CacheManager的基类。我现在已经编辑了这篇文章。唯一能导致某些东西被注入的是
内核.get
内核.Inject
[Inject]
位仅在其中一个顶级方法触发时告知注入位置。现在就买。特定于WCF,您是否在
.svc.cs
中设置NinjectControllerFactory链接?你有没有看过Ninject WCF示例并试图将你的代码拉进去?对不起,你的代码让我假设了WCF。不知道是否/在何处可以找到一个好的基于ASMX的示例,但同样的原则也适用于此-您需要从某些东西中派生出一些东西,以便调用Ninject来进行注入-该属性本身只是坐在那里不做任何事情。
public class CacheManagerFactoryBuilder : ICacheManagerFactoryBuilder
{
    private ICacheManagerFactory _Factory;

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

    public ICacheManagerFactory GetCacheManagerFactory()
    {
        return _Factory;
    }
}
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;
    }

}