在MVC3/Ninject 3环境中使用Ninject w/ ASMX Web服务

4
我希望你能帮助将一个经典的asmx web服务整合到我的MVC3环境中,并且我想让核心/容器在两者之间共享。过去在使用ASP.NET Web Forms时,我可以使用以下方法:
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class Service : WebServiceBase
{
    [Inject]
    public IContextProvider ContextProvider { get; set; }
...

这个使用了旧版的Ninject.Web来共享内核,使用KernelContainer在WebServiceBase、PageBase等中进行共享。

现在我有一个使用Ninject.Web.MVC的MVC3应用程序,我需要一个旧的Web服务在同样的空间中运行,使用相同的内核/绑定。但是我没有找到关于如何启动这样的设置的任何信息。

有没有人有任何想法、示例或文章可以指导我(除了不使用asmx Web服务)?

1个回答

4

MVC框架支持DependencyResolver,可以与Ninject for MVC集成。虽然无法为ASMX Web服务定义自定义工厂,但您可以执行以下操作:

public class Service : WebService
{
  public IContextProvider ContextProvider {get;set;}

  public Service()
  {
    ContextProvider = DependencyResolver.Current.GetService<IContextProvider>();
  }
}

在构造服务期间,您无法注入依赖项,但可以在构造函数中自己解析它们。


谢谢,这个可以用,现在只能这样了。不幸的是,它将服务直接绑定到ASP.NET MVC上。希望有更好的方法 :( - Nate Rickard
1
@NateRickard 实际上,DependencyResolver 是一个试图概括依赖注入问题的组件。它不是每个 IoC 框架都要实现自己的系统,而是能够连接到 DependencyResolver 系统以与其他库进行交互。 - armen.shimoon
是的,在这方面它很好,不会将我绑定到Ninject。我遇到的问题是,这个服务可以在不同的环境中使用 - ASP.NET Web表单、MVC等。因此,使用DependencyResolver会添加MVC的依赖项,因为它存在于该命名空间中。 - Nate Rickard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接