我收到了一个错误:
StructureMap异常代码:202 没有为PluginFamily定义的默认实例MVCPoco.Services.IService,MVCPoco.Services,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null
Line 96: {
Line 97: Type controllerType = base.GetControllerType(context, controllerName);
Line 98: return ObjectFactory.GetInstance(controllerType) as IController;
Line 99: }
Line 100: }
错误发生在第98行
有什么想法吗? 我正在使用visual studio 2010附带的asp.net mvc 2预览版2。
答案 0 :(得分:1)
您尝试实例化的控制器对IService具有构造函数依赖性。在配置StructureMap时,必须确保注册IService的具体实现。 DefaultConventionScanner将仅注册与其接口具有相同名称的实现(不带前导I)。因此,除非您的IService实现名为Service,否则它将不会自动注册。要明确注册,请在启动脚本中添加以下内容:
x.For<IService>().Use<MyService>();
或者,如果您从最新的源代码运行StructureMap,则可以在Scan()表达式中使用SingleImplementationScanner:
y.With(new SingleImplementationScanner());
如果它们是扫描代码中接口的唯一实现,则会自动注册具体类型,无论名称如何。
答案 1 :(得分:0)
您必须在ObjectFactory.Configure函数中注册应用程序启动时要注入的类型。查看Structure Map网站上有关配置IOC容器的文档。
安德鲁
答案 2 :(得分:0)
好吧,我已经正确设置了结构图,我刚刚切换到方法
public static void Configure()
{
ObjectFactory.Initialize(x =>
x.AddRegistry(new IOCRegistry())); // in here i have registered my dependencies with for method.
}