Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api Ninject.Web.WebApi.OwinHost v3.2.x的Ninject依赖项_Asp.net Web Api_Ninject_Azure Web Roles_Owin - Fatal编程技术网

Asp.net web api Ninject.Web.WebApi.OwinHost v3.2.x的Ninject依赖项

Asp.net web api Ninject.Web.WebApi.OwinHost v3.2.x的Ninject依赖项,asp.net-web-api,ninject,azure-web-roles,owin,Asp.net Web Api,Ninject,Azure Web Roles,Owin,我正在尝试以Azure工作者角色禁用APIController。我以前在同一个解决方案中的asp.net mvc 5/web api 2项目中使用相同的控制器完成了九次注入。本项目中的另一个非喷射测试控制器工作并提供预期结果 在尝试添加NuGet包Ninject.Web.WebApi.OwinHost(版本3.2.x)时,该包似乎是错误的?需要一个Ninject版本≥ 3.0.0.0&&()=>newbootstrapper().kernel); kernel.Bind().To(); //将基

我正在尝试以Azure工作者角色禁用APIController。我以前在同一个解决方案中的asp.net mvc 5/web api 2项目中使用相同的控制器完成了九次注入。本项目中的另一个非喷射测试控制器工作并提供预期结果

在尝试添加NuGet包Ninject.Web.WebApi.OwinHost(版本3.2.x)时,该包似乎是错误的?需要一个Ninject版本≥ 3.0.0.0&&<3.1.0.0

我试过了

Install-Package Ninject.Web.WebApi.OwinHost -ProjectName WorkerRole1
Install-Package Ninject.Web.WebApi.OwinHost -Pre -ProjectName WorkerRole1
Install-Package Ninject.Web.WebApi.OwinHost -Version 3.2.0 -ProjectName WorkerRole1
Install-Package Ninject.Web.WebApi.OwinHost -Version 3.2.1-unstable-002 -ProjectName WorkerRole1
我能够成功添加Ninject.Web.WebApi.SelfHost,但是我认为我需要owin风格,SelfHost似乎没有安装Ninject.webcommon.cs或同等产品。一旦我成功地将OwinHost包括在内,我不知道在工人角色中将ninject连接到owin自我宿主的何处。我想它会被钉在脚手架上

尝试安装Ninject.Web.WebApi.OwinHost的结果

PM> Install-Package Ninject.Web.WebApi.OwinHost -Pre -ProjectName WorkerRole1
Attempting to resolve dependency 'Ninject.Web.WebApi (≥ 3.2.0-unstable)'.
Attempting to resolve dependency 'Ninject (≥ 3.2.0.0 && < 3.3.0.0)'.
Attempting to resolve dependency 'Ninject.Web.Common (≥ 3.2.0.0 && < 3.3.0.0)'.
Attempting to resolve dependency 'Microsoft.AspNet.WebApi (≥ 5.0 && < 6.0)'.
Attempting to resolve dependency 'Microsoft.AspNet.WebApi.WebHost (≥ 5.1.2 && < 5.2.0)'.
Attempting to resolve dependency 'Microsoft.AspNet.WebApi.Core (≥ 5.1.2 && < 5.2.0)'.
Attempting to resolve dependency 'Microsoft.AspNet.WebApi.Client (≥ 5.1.2)'.
Attempting to resolve dependency 'Newtonsoft.Json (≥ 4.5.11)'.
Attempting to resolve dependency 'Ninject.Web.Common.OwinHost (≥ 3.0 && < 4.0)'.
Attempting to resolve dependency 'Ninject.Extensions.ContextPreservation (≥ 3.0 && < 4.0)'.
Attempting to resolve dependency 'Ninject (≥ 3.0.0.0 && < 3.1.0.0)'.
Install-Package : Updating 'Ninject 3.2.2.0' to 'Ninject 3.0.1.10' failed. Unable to find versions of 'Ninject.Web.WebApi, Ninject.Web.Common' that are compatible with 'Ninject 3.0.1.10'.
At line:1 char:1
+ Install-Package Ninject.Web.WebApi.OwinHost -Pre -ProjectName WorkerRole1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Install-Package], InvalidOperationException
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand

PM> 

我知道这已经晚了,但我遇到了同样的问题,并通过谷歌搜索找到了这个问题。我最终通过
-DependencyVersion
解决了这个问题:

Install-Package Ninject.Web.WebApi.OwinHost -DependencyVersion Highest

如果您不想更新所有依赖的NuGet软件包,我发现手动为Ninject.Web.WebApi.OwinHost安装所有与Ninject相关的依赖项,然后安装Ninject.Web.WebApi.OwinHost也解决了这个问题。

我今天遇到了同样的问题,我通过以下方法解决了这个问题 将以下类实现添加到项目中

    public class NinjectDependencyScope : IDependencyScope
        {
            IResolutionRoot resolver;

            public NinjectDependencyScope(IResolutionRoot resolver)
            {
                this.resolver = resolver;
            }

            public object GetService(Type serviceType)
            {
                if (resolver == null)
                    throw new ObjectDisposedException("this", "This scope has been disposed");

                return resolver.TryGet(serviceType);
            }

            public System.Collections.Generic.IEnumerable<object> GetServices(Type serviceType)
            {
                if (resolver == null)
                    throw new ObjectDisposedException("this", "This scope has been disposed");

                return resolver.GetAll(serviceType);
            }

            public void Dispose()
            {
                IDisposable disposable = resolver as IDisposable;
                if (disposable != null)
                    disposable.Dispose();

                resolver = null;
            }
        }

    // This class is the resolver, but it is also the global scope
    // so we derive from NinjectScope.

public class NinjectDependencyResolver : NinjectDependencyScope, IDependencyResolver
{
    IKernel kernel;

    public NinjectDependencyResolver(IKernel kernel)
        : base(kernel)
    {
        this.kernel = kernel;
    }

    public IDependencyScope BeginScope()
    {
        return new NinjectDependencyScope(kernel.BeginBlock());
    }
}
public类NinjectDependencyScope:IDependencyScope
{
IResolutionRoot解析器;
公共NinjectDependencyScope(IResolutionRoot解析器)
{
this.resolver=解析器;
}
公共对象GetService(类型serviceType)
{
if(解析器==null)
抛出新的ObjectDisposedException(“此”、“此范围已被处置”);
返回解析器.TryGet(服务类型);
}
public System.Collections.Generic.IEnumerable GetServices(类型serviceType)
{
if(解析器==null)
抛出新的ObjectDisposedException(“此”、“此范围已被处置”);
返回解析器.GetAll(serviceType);
}
公共空间处置()
{
IDisposable disposable=解析程序为IDisposable;
if(一次性!=null)
一次性的,一次性的;
解析器=空;
}
}
//此类是解析器,但也是全局作用域
//所以我们从NinjectScope派生。
公共类NinjectDependencyResolver:NinjectDependencyScope,IDependencyResolver
{
IKernel核;
公共NinjectDependencyResolver(IKernel内核)
:基本(内核)
{
this.kernel=内核;
}
公共IDependencyScope BeginScope()
{
返回新的NinjectDependencyScope(kernel.BeginBlock());
}
}
2-然后在NinjectWebCommon中

将以下代码行添加到此方法CreateKernel(): GlobalConfiguration.Configuration.DependencyResolver=新的NinjectDependencyResolver(内核); 因此,全面实施将是:

private static IKernel CreateKernel()
        {
           var kernel = new StandardKernel();
            try
            {
                kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
                kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
                // Install our Ninject-based IDependencyResolver into the Web API config
                GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel);

                RegisterServices(kernel);
                return kernel;
            }
            catch
            {
                kernel.Dispose();
                throw;
            }
        }
private静态IKernel CreateKernel()
{
var kernel=新的标准内核();
尝试
{
kernel.Bind().ToMethod(ctx=>()=>newbootstrapper().kernel);
kernel.Bind().To();
//将基于Ninject的IDependencyResolver安装到Web API配置中
GlobalConfiguration.Configuration.DependencyResolver=新的NinjectDependencyResolver(内核);
注册服务(内核);
返回内核;
}
抓住
{
Dispose();
投掷;
}
}

我自己尝试了这段代码,它成功地工作了

这使得安装包成功。尚未在nuGet文档中成功找到“-DependencyVersion Highest”的文档。我希望Ninject的作者或维护人员能对此发表评论。我无法安装此安装包Ninject.Web.WebApi.OwinHost
private static IKernel CreateKernel()
        {
           var kernel = new StandardKernel();
            try
            {
                kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
                kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
                // Install our Ninject-based IDependencyResolver into the Web API config
                GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel);

                RegisterServices(kernel);
                return kernel;
            }
            catch
            {
                kernel.Dispose();
                throw;
            }
        }