Structure Map 依赖注入问题:没有注册默认实例,无法自动确定

问题描述 投票:0回答:1

我刚刚从 nuget 添加了 StructureMap 并像这样修改了 DefaultRegistry 文件

公共类DefaultRegistry:注册表{ #region 构造函数和析构函数

        public DefaultRegistry() {
            Scan(
                scan => {
                    // scan.TheCallingAssembly();
                    scan.AssembliesFromApplicationBaseDirectory(
                     filter => filter.FullName.StartsWith("TaskManagement"));

                    scan.WithDefaultConventions();
                    scan.With(new ControllerConvention());
                });
            //For<IExample>().Use<Example>();
        }

        #endregion
    }
}

控制器代码是

 namespace TaskManagement.TaskStatus 
        {
            public class TaskStatusController : Controller
            {
                private readonly IGetTaskStatusList _query;
                public TaskStatusController(IGetTaskStatusList query)
                {
                    _query = query;
                }
                // GET: TaskStatus
                public ActionResult Index()
                {
                    var TaskStatus = _query.Execute();
                    return View(TaskStatus);
                }
            }
        }

我遇到的异常 StructureMap.StructureMapConfigurationException:“没有注册默认实例,无法自动确定类型“Application.TaskStatus.IGetTaskStatusList”

There is no configuration specified for Application.TaskStatus.IGetTaskStatusList

1.) new TaskStatusController(*Default of IGetTaskStatusList*)
2.) TaskManagement.TaskStatus.TaskStatusController
3.) Instance of TaskManagement.TaskStatus.TaskStatusController
4.) Container.GetInstance(TaskManagement.TaskStatus.TaskStatusController)
visual-studio dependency-injection asp.net-mvc-5 structuremap dependency-inversion
1个回答
0
投票

我的接口和类在其他项目中;所以有两种方法可以解决这个问题。我们可以使用其中任何一个来解决这个问题。

  1. scan.AssembliesFromApplicationBaseDirectory();
  2. For<IGetTaskStatusList>().Use<GetTaskStatusList>();

示例:

public DefaultRegistry() {
         Scan ( scan => {
                    scan.TheCallingAssembly();
                  //scan.AssembliesFromApplicationBaseDirectory();
                    scan.WithDefaultConventions();
                    scan.With(new ControllerConvention());
              });
        For<IGetTaskStatusList>().Use<GetTaskStatusList>();
}
© www.soinside.com 2019 - 2024. All rights reserved.