Я вижу много вопросов, задающих тот же вопрос, что и я, но это связано с тем, что это работает на моем локальном, который является окнами 7 и IISExpress VS Но на производственном сервере это дает мне эту ошибку. сервер имеет Windows Server 2008 и IIS 7.5 и точка NET Framework 4.5.1 (приложение является asp.net MVC 4)
Нет конструктора без параметров для этого объекта - работа на локальном компьютере, но не на рабочем сервере
StackTrace
[MissingMethodException: No parameterless constructor defined for this object.]
System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +159
System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +256
System.Activator.CreateInstance(Type type, Boolean nonPublic) +127
System.Activator.CreateInstance(Type type) +11
System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +92
[InvalidOperationException: An error occurred when trying to create a controller of type 'Website.Web.Controllers.MainController'. Make sure that the controller has a parameterless public constructor.]
System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +256
System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +81
System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +270
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +86
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +12638163
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288
MainController
public class MainController : BaseController
{
private readonly IUnitOfWork2 _uow2;
private readonly IContract _contract;
public MainController(IUnitOfWork2 uow2, IContract contract)
{
_contract = contract;
_uow2 = uow2;
}
public ActionResult Index()
{
return View();
}
}
}
и BaseController
[Authorize]
public class BaseController : Controller
{
protected virtual new CustomPrincipal User
{
get { return HttpContext.User as CustomPrincipal; }
}
Я понятия не имею, почему он работает на местном уровне, но после публикации дает мне ошибку!
Глядя на ваш конструктор контроллера, вы используете какую-то форму инъекции зависимостей. Какой пакет вы используете для этого, и где вы это делаете (обычно Global.asax)? Мне кажется, что в разработке ваша фабрика контроллеров (во время выполнения) заменена версией DI, а после публикации вашего контроллера завод является исходной фабрикой контроллеров по умолчанию от MVC (глядя на ваш стек). Правильно ли опубликован ваш global.asax? – Maarten
Я использовал 'StructuremapMvc' (старую версию) и ее в' App.App_Start'. ничего общего с Global.asax Я думаю, – mhesabi
А вы, вероятно, используете 'WebActivator'. Возможно, вы можете проверить, действительно ли запущен метод 'Start', например, где-то записывает выполнение. Правильно ли опубликована сборка 'WebActivator'? Также возможно обновление до последней версии StructureMap? – Maarten