这是我第一次在这里发布并相信我,我已经搜索了高和低的答案我的问题,但没有什么成功。Ninject .Net 3.5 SOAP Webservice问题
背景:我目前开始尝试重新考虑我们现有的SOAP Web服务(.Net 3.5),以便使用Ninject来完成一些IOC和DI。我有我试图在Web方法initalize一个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继承基地初始化的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为空。为什么当我调用web方法时,注入不会发生?
我目前没有看到你在调用“return this.CacheManager.Get();”行的CacheManager变量的初始化。如果你正在做构造函数注入,它应该在构造函数中初始化。 – Kristof
对不起,我遗漏了启动CacheManager的Base类。我现在编辑了这篇文章。 – Nanz
唯一可能导致某些内容被注入的是一个'Kernel.Get'或一个'Kernel.Inject'。当其中一个顶级方法触发时,'[Inject]'位只会告诉它在哪里进行注入。现在购买http://manning.com/seemann。具体到WCF的东西,你是否在'.svc.cs'中设置NinjectControllerFactory链接?你看过Ninject WCF示例并试图在那里提取你的代码吗? –