Asp.net mvc 4 结构图配置asp.net mvc 4
我的MVC4 StructureMap配置有问题,当我运行项目时,编译器会触发此错误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,
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>());