17

我正在低于错误。我设置它类似于 asp.net mvc 4。

没有为此对象定义无参数构造函数。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.MissingMethodException:没有为此对象定义无参数构造函数。

终于发现实际异常“尝试获取HomeController类型的实例时发生激活错误,键“””

当我要将服务类注入家庭控制器时发生错误

4

4 回答 4

40

以下步骤对我有用:

  1. 在 Visual Studio 2013 RTM 中创建新的 ASP.NET MVC 5 应用程序
  2. 安装StructureMap.MVC4NuGet:

    Install-Package StructureMap.MVC4
    
  3. 创建一个新界面:

    public interface IDependency
    {
        string SayHello();
    }
    
  4. 实现这个接口:

    public class ConcreteDepenedency: IDependency
    {
        public string SayHello()
        {
            return "Hello World";
        }
    }
    
  5. 让 HomeController 使用这个接口:

    public class HomeController : Controller
    {
        private readonly IDependency dependency;
        public HomeController(IDependency dependency)
        {
            this.dependency = dependency;
        }
    
        public ActionResult Index()
        {
            return Content(this.dependency.SayHello());
        }
    }
    
  6. 在以下位置配置您的容器~/DependencyResolution/Ioc.cs

    using StructureMap;
    using WebApplication1.Controllers;
    
    namespace WebApplication1.DependencyResolution {
    
        public static class IoC {
    
            public static IContainer Initialize() {
    
                ObjectFactory.Initialize(x =>
                {
                    x.For<IDependency>().Use<ConcreteDepenedency>();
                });
    
                return ObjectFactory.Container;
            }
        }
    }
    
  7. 运行您的应用程序Ctrl+F5

  8. ConcreteDependency成功注入HomeController
于 2013-10-20T11:51:22.230 回答
10

我有一个详细的演练展示如何使用最新的 StructureMap for MVC 5 包在这里工作: http: //ardalis.com/resolving-dependencies-in-asp.net-mvc-5-with-structuremap

这与我之前发布的 ASP.NET MVC 3 中所必需的并没有什么不同:http: //ardalis.com/How-Do-I-Use-StructureMap-with-ASP.NET-MVC-3

基本上,您只需安装正确的 NuGet 包,修改控制器以接受依赖项,并将接口连接到 IoC.cs 中的实现。如果您遵循 StructureMap 的默认约定,您可以让这种连线对许多类型自动发生。

于 2014-06-25T15:47:28.577 回答
1

StructureMap (2.6.4.1) 与 ASP.NET MVC 5 兼容,升级后您无需更改任何内容。

但是,升级过程并不像您想象的那么简单。

如果您必须遵循,这是所有步骤的列表。

PS:升级后我遵循了 Rick Anderson 的教程(他说你应该先这样做),但它仍然有效。

希望能帮助到你。

于 2013-10-21T09:21:33.103 回答
-4

谢谢大家的回复,终于找到问题了。在我的服务类中,我引用了一个应用程序设置,但没有在 web.config 文件中定义它,因为该结构图无法注入我的服务类的实例。

private readonly string _path =
            ConfigurationManager.AppSettings["vp"].ToString(CultureInfo.InvariantCulture);
于 2013-10-22T20:09:20.953 回答