StructureMap错误202设置IOC容器

时间:2009-12-22 12:55:15

标签: c# asp.net-mvc structuremap ioc-container

我收到了一个错误:

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。

3 个答案:

答案 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.

        }