【问题标题】:StructureMap Error 202 Setting up IOC containerStructureMap 错误 202 设置 IOC 容器
【发布时间】:2009-12-22 12:55:14
【问题描述】:

我收到一个错误:

结构图异常代码: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 preview 2。

【问题讨论】:

  • private static void InitializeStructureMap(IInitializationExpression x) { x.Scan(y => { y.Assembly("MVCPoco.Core"); y.Assembly("MVCPoco.Data"); y.With (); });我正在使用该代码来使用默认名称约定......也许我做错了什么。
  • 我正在使用 SM 2.5.2 这些方法在我当前的上下文中不存在 x.For().Use(); y.With(new SingleImplementationScanner());

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


【解决方案1】:

您尝试实例化的控制器对 IService 具有构造函数依赖性。您必须确保在配置 StructureMap 时注册了 IService 的具体实现。 DefaultConventionScanner 只会注册与其接口同名的实现(没有前导 I)。因此,除非您的 IService 实现被命名为 Service,否则它不会自动注册。要显式注册它,请在初始化脚本中添加如下内容:

x.For<IService>().Use<MyService>();

或者,如果您从最新的源代码运行 StructureMap,您可以在 Scan() 表达式中使用 SingleImplementationScanner:

y.With(new SingleImplementationScanner());

如果具体类型是扫描代码中接口的唯一实现,它将自动注册具体类型,无论名称如何。

【讨论】:

    【解决方案2】:

    您必须在 ObjectFactory.Configure 函数中注册要在应用程序启动时注入的类型。在 Structure Map 的站点上查看有关配置 IOC 容器的文档。

    安德鲁

    【讨论】:

      【解决方案3】:

      好吧,我已经正确设置了我刚刚切换到方法的结构图

       public static void Configure()
              {
                  ObjectFactory.Initialize(x =>
      
                  x.AddRegistry(new IOCRegistry())); // in here i have registered my dependencies with for method.
      
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-12
        • 2011-02-09
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 2012-04-11
        • 1970-01-01
        相关资源
        最近更新 更多