调试代码时Ninject没有源可用错误

时间:2011-12-14 15:00:25

标签: c# asp.net-mvc-3 ninject-2

我使用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)时发生以下错误:

无可用资源

希望图片可见?

enter image description here

有谁知道为什么会发生这种情况?

2 个答案:

答案 0 :(得分:4)

这是因为Visual Studio找不到Ninject的源代码。

执行以下操作之一:

  • 下载相应的源代码并将VS指向它
  • 配置VS以使用symbolsource.org作为符号服务器(仅适用于Ninject 3.0.0-rc3及更高版本)
  • 删除所有Ninject pdb&#39;
  • 在VS设置中禁用对其他代码的调试(工具/选项/调试/启用我的代码)

请参阅http://msdn.microsoft.com/en-us/library/3sehk0fb%28v=vs.100%29.aspx

答案 1 :(得分:1)

您应该要求软件包维护者发布符号,例如通过SymbolSource。然后你就可以加载它们并进入Ninject源。