這是我第一次在這裏發佈並相信我,我已經搜索了高和低的答案我的問題,但沒有什麼成功。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示例並試圖在那裏提取你的代碼嗎? –