C# 使用MVC和WebAPI中的Ninject创建抽象工厂

C# 使用MVC和WebAPI中的Ninject创建抽象工厂,c#,ninject,asp.net-web-api,ninject.web.mvc,C#,Ninject,Asp.net Web Api,Ninject.web.mvc,我在C#4.5项目中使用Ninject作为IoC容器。我正在尝试使用Ninject注入一个抽象工厂模式,该模式在MVC中运行良好,但在WebAPI中却无法运行 我已安装以下设备: Ninject 3.0.1.10 Ninject.Extensions.WCF 3.0.0.5 Ninject.MVC3 3.0.0.6 Ninject.Web.Common 3.0.0.7 SignalR.Ninject 我的工厂类如下所示: public interface IBusinessEngineFact

我在C#4.5项目中使用Ninject作为IoC容器。我正在尝试使用Ninject注入一个抽象工厂模式,该模式在MVC中运行良好,但在WebAPI中却无法运行

我已安装以下设备:

Ninject 3.0.1.10
Ninject.Extensions.WCF 3.0.0.5
Ninject.MVC3 3.0.0.6
Ninject.Web.Common 3.0.0.7
SignalR.Ninject
我的工厂类如下所示:

public interface IBusinessEngineFactory
{
    T GetBusinessEngine<T>() where T : IBusinessEngine;
}

public interface IBusinessEngine
{
}

public class BusinessEngineFactory : IBusinessEngineFactory
{

    private IKernel Kernel { get; set; }

    public BusinessEngineFactory(IKernel kernel)
    {
        Kernel = kernel;
    }

    T IBusinessEngineFactory.GetBusinessEngine<T>()
    {
        return Kernel.Get<T>();
    }
}
当我运行这个函数时,MVC控制器处理得很好,但是webapi函数没有,我得到了一条模糊的错误消息,它发生在调用webapi构造函数中的任何代码之前

“加载Ninject组件ICache时出错

内核的组件容器中未注册任何组件“

我认为问题在于MVC了解内核,但因为WebAPI使用了以下内容:

GlobalConfiguration.Configuration.DependencyResolver = new NinjectResolver(kernel);
所以它不知道内核。用于创建业务引擎的代码存在于与主MVC、Web API和ninject创建不同的项目中,如果我能提供帮助,我不希望将依赖关系附加到System.Web.Http(对于GlobalConfiguration.Configuration.DependencyResolver对象)。有没有办法让它同时在MVC和WebAPI上工作


提前感谢

我修复了这个问题,因此IoC将注入抽象工厂,并在MVC和WebAPI中返回正确的具体实现。最后,我的解决方案包含以下软件包:

<package id="Ninject" version="3.0.1.10" targetFramework="net40" />
<package id="Ninject.Extensions.Wcf" version="3.0.0.5" targetFramework="net40" />
<package id="Ninject.MVC3" version="3.0.0.6" targetFramework="net40" />
<package id="Ninject.Web.Common" version="3.0.0.7" targetFramework="net40" />
<package id="Ninject.Web.WebApi-RC" version="3.0.0.22" targetFramework="net45" />

业务引擎工厂已修改为使用以下内容:

public class BusinessEngineFactory : IBusinessEngineFactory
{

    private IResolutionRoot resolutionRoot { get; set; }

    public BusinessEngineFactory(IResolutionRoot resolutionRoot)
    {
        this.resolutionRoot = resolutionRoot;
    }

    T IBusinessEngineFactory.GetBusinessEngine<T>()
    {
        return this.resolutionRoot.Get<T>();
    }
}
公共类BusinessEngineFactory:IBusinessEngineFactory
{
私有IResolutionRoot resolutionRoot{get;set;}
公共业务引擎目录(IResolutionRoot resolutionRoot)
{
this.resolutionRoot=resolutionRoot;
}
T IBusinessEngineFactory.GetBusinessEngine()
{
返回此.resolutionRoot.Get();
}
}
我尝试使用包Ninject.Web.WebApi,但该包不起作用,而Ninject.Web.WeApi.Updated在应用程序启动时发出“异常已被调用的目标抛出”错误消息,阻止了我的解决方案运行。回到旧版本是解决方案,所以现在一切正常。我甚至还检查了它在WCF中的工作情况

GlobalConfiguration.Configuration.DependencyResolver = new NinjectResolver(kernel);
<package id="Ninject" version="3.0.1.10" targetFramework="net40" />
<package id="Ninject.Extensions.Wcf" version="3.0.0.5" targetFramework="net40" />
<package id="Ninject.MVC3" version="3.0.0.6" targetFramework="net40" />
<package id="Ninject.Web.Common" version="3.0.0.7" targetFramework="net40" />
<package id="Ninject.Web.WebApi-RC" version="3.0.0.22" targetFramework="net45" />
public class BusinessEngineFactory : IBusinessEngineFactory
{

    private IResolutionRoot resolutionRoot { get; set; }

    public BusinessEngineFactory(IResolutionRoot resolutionRoot)
    {
        this.resolutionRoot = resolutionRoot;
    }

    T IBusinessEngineFactory.GetBusinessEngine<T>()
    {
        return this.resolutionRoot.Get<T>();
    }
}