第一次我打電話給我的服務一切正常。從那以後,我收到此錯誤: 「錯誤加載Ninject組件ICACHE \ r \ n沒有這樣的組件已經在內核中的組件容器註冊「加載Ninject組件ICache時出錯」第二次給我打電話我的服務
我打電話控制器具有的iKernel作爲其構造函數的參數,我的猜測是,這是問題
如何我應該內核對象傳遞到我的服務
我控制器構造函數:?
public MyController(IKernel diContainer)
{
_diContainer = diContainer;
}
我Global.asax文件的部分:
var kernel = NinjectWebApi.Kernel;
kernel.Bind<IMyController().To<MyController();
//Set the dependency resolver to use ninject
GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel);
我正在使用Ninject 3.2。
對於我沒有將內核傳遞給服務的其他服務,此方法正常工作。
public class NinjectDependencyScope : IDependencyScope
{
private IResolutionRoot _resolver;
public NinjectDependencyScope(IResolutionRoot resolver)
{
_resolver = resolver;
}
public object GetService(Type serviceType)
{
if (_resolver == null)
{
throw new ObjectDisposedException("this", "This scope has been disposed.");
}
return _resolver.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
if (_resolver == null)
{
throw new ObjectDisposedException("this", "This scope has been disposed.");
}
return _resolver.GetAll(serviceType);
}
public void Dispose()
{
var disposable = _resolver as IDisposable;
disposable?.Dispose();
_resolver = null;
}
}
public class NinjectDependencyResolver : NinjectDependencyScope, IDependencyResolver
{
private readonly IKernel _kernel;
public NinjectDependencyResolver(IKernel kernel) : base(kernel)
{
_kernel = kernel;
}
public IDependencyScope BeginScope()
{
return new NinjectDependencyScope(_kernel.BeginBlock());
}
}
你有沒有手動編寫NinjectDependencyResolver或使用了一些準備好的東西? –
我現在意識到NinjectDependencyResolver不是一個開箱即用的對象。這是我的同事所做的。這個名字讓我覺得它來自ninject本身。這可能值得調查。 – jimmy