C# Ninject.Net 3.5 SOAP Web服务问题
这是我第一次在这里发帖,相信我,我已经到处寻找我问题的答案,但几乎没有成功 背景:我目前已经开始尝试重新考虑现有的SOAPWeb服务(.NET3.5),以便使用Ninject进行一些IOC和DI。我有一个CacheManager,我正试图在web方法中初始化它,但是注入似乎没有起作用 我有一个控制台应用程序,它使用以下命令调用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
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应用程序时,它点击GetSomething,CacheManager为空。为什么在我调用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;
}
}