我使用NuGet安装最新版本的Ninject(v2.2.1.4)。
然后我创建了自己的NinjectDependencyResolver(归功于Adam Freeman & Steve Sanderson):
public class NinjectDependencyResolver : IDependencyResolver
{
private IKernel kernel;
public NinjectDependencyResolver()
{
kernel = new StandardKernel();
AddBindings();
}
public object GetService(Type serviceType)
{
return kernel.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType) {
return kernel.GetAll(serviceType);
}
public IBindingToSyntax<T> Bind<T>()
{
return kernel.Bind<T>();
}
public IKernel Kernel
{
get { return kernel; }
}
private void AddBindings()
{
kernel.Bind<ITitleRepository>().To<TitleRepository>();
kernel.Bind<IDayRepository>().To<DayRepository>();
kernel.Bind<IMonthRepository>().To<MonthRepository>();
}
}
然后在global.asax applcation startup中注册依赖项解析器:
protected void Application_Start()
{
//...other code
DependencyResolver.SetResolver(new NinjectDependencyResolver());
}
然后我的代码中包含以下行:
ITitleRepository titleRepository = (ITitleRepository)DependencyResolver.Current.GetService(typeof(ITitleRepository));
如果我在调试模式下运行代码,出现才能正常工作,但是,如果我逐步执行此代码(然后逐行),那么当它运行kernel.TryGet(serviceType)时发生以下错误:
无可用资源
希望图片可见?
有谁知道为什么会发生这种情况?
答案 0 :(得分:4)
这是因为Visual Studio找不到Ninject的源代码。
执行以下操作之一:
请参阅http://msdn.microsoft.com/en-us/library/3sehk0fb%28v=vs.100%29.aspx
答案 1 :(得分:1)
您应该要求软件包维护者发布符号,例如通过SymbolSource。然后你就可以加载它们并进入Ninject源。