Asp.net mvc 4 结构图配置asp.net mvc 4

Asp.net mvc 4 结构图配置asp.net mvc 4,asp.net-mvc-4,structuremap,Asp.net Mvc 4,Structuremap,我的MVC4 StructureMap配置有问题,当我运行项目时,编译器会触发此错误 No Default Instance defined for PluginFamily Mace_CrmSystem.Controllers.HomeController 这是我的密码 global.aspx代码 namespace Mace_CrmSystem { // Note: For instructions on enabling IIS6 or IIS7 classic mode,

我的MVC4 StructureMap配置有问题,当我运行项目时,编译器会触发此错误

 No Default Instance defined for PluginFamily Mace_CrmSystem.Controllers.HomeController
这是我的密码

global.aspx代码

namespace Mace_CrmSystem
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

            RouteTable.Routes.MapRoute("Oqla", "Oqla", new { controller = "Home", action = "index" });
            RouteConfig.RegisterRoutes(RouteTable.Routes);

            ControllerBuilder.Current.SetControllerFactory(new MyCustomeFactory());
            ObjectFactory.Initialize(x => x.For<string>().Use<string>());

         }
    }


}
控制器类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Mace_CrmSystem.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public HomeController(string parameter)
        {
            TempData["Hi"] = "Hi";
        }

        public ActionResult Index()
        {

            return View();
        }

    }

    public class logger
    {
        public void log()
        { 

        }
    }
}
我注意到当我添加一个object类型的参数时

 public HomeController(logger parameter)
而不是

 public HomeController(string parameter)

ObjectFactory.Initialize(x=>x.For().Use());
而不是

ObjectFactory.Initialize(x => x.For<string>().Use<string>());
ObjectFactory.Initialize(x=>x.For().Use());
它可能可以工作,但使用字符串参数则不起作用


所以请告诉任何人给我解释一下。

根据我对StructureMap的理解(如果我错了,请有人纠正我)您看到所看到的行为的原因是StructureMap在默认情况下将使用最长的构造函数,并尝试使用向StructureMap注册的默认实例填充参数

在您的实例中,您没有提供字符串的默认实例,因此StructureMap不知道如何解析它

如果您想做您正试图做的事情,那么最好的办法是创建一个自定义约定(),但是这些都依赖于知道构造函数期望的属性的名称

不过,一般来说,在处理字符串时,最好的办法是将字符串移动到中间类型,然后注入该类型

ObjectFactory.Initialize(x => x.For<logger>().Use<logger>());
ObjectFactory.Initialize(x => x.For<string>().Use<string>());