2

我刚刚使用 Ninject 3 更新了我的应用程序。将 App_Start 中的文件从 NinjectMVC3 更改为 NinijectWebCommon.cs。移动了我的文件,更新了 DLL。现在我开始收到这个错误:

“使用 Dictionary{string, string} Provider 的条件隐式自绑定激活 Dictionary{string, string} 时出错。激活路径:4) 将依赖 Dictionary{string, string} 注入 MapWidgetViewModel 类型构造函数的参数 widgetSettings 3)将依赖项 IDetailedSearchResultCollectionWidget 注入到 MediaSourcesViewModel 类型的构造函数的参数 mediaWidgets 2) 将依赖项 ITabItem 注入到 TabNavigationController 类型的构造函数的参数 tabItems 1) 请求 TabNavigationController

建议:1)确保提供者正确处理创建请求。”

在这里生成它的代码:

public MediaSourcesViewModel(IEnumerable<IMediaSourcesDataProvider> dataProviders,
               IEnumerable<IDetailedSearchResultCollectionWidget> mediaWidgets,
               IMediaItemDetailsWidget itemDetailsWidget)
        {
        this.Description = "Source list";
            this.ActionName = "DisplaySourcesAsPartial";
            this.ControllerName = "MediaSources";
            this.DefaultType = "MediaManagement";

            _dataProviders = dataProviders;

            MediaWidgets = new List<IDetailedSearchResultCollectionWidget>();
            MediaWidgets.AddRange(mediaWidgets);         //Set Tab Info
            this.Name = "Sources";
        }

MapWidgetViewModel 类定义如下:

public class MapWidgetViewModel : IDetailedSearchResultCollectionWidget, IMapWidgetSettings
{
   //constructor:
   public MapWidgetViewModel(IEnumerable<IDetailedSearchResult> dataSet, 
          Dictionary<String,String> widgetSettings = null)
        {
            InitParentInterfaceProperties();
        }
}

最后绑定:

kernel.Bind<IDetailedSearchResultCollectionWidget>().To<MapWidgetViewModel>(); 

没有

kernel.Bind<MapWidgetViewModel>().ToSelf();

感谢您提供如何解决此问题的任何想法。

多谢!

亚历克斯

4

1 回答 1

4

好的..找到有帮助的答案..这里是: Using default parameter values with Ninject 3.0

只需要覆盖设置: kernel.Settings.AllowNullInjection = true;

谢谢,艾尔

于 2012-07-11T16:11:54.480 回答