다음은 증상 내가 경험하고 있습니다내 컨트롤러가 호출되지 않을 때 왜 인스턴스화됩니까?
나는 지역에 새로운 빈 컨트롤러가 :
public class JamController : Controller
{
public JamController()
{
throw new Exception("Not implemented!");
}
내가 http://myprojectserver.example.com:12345/urlthatdoesnotexist를 방문하면, 나는 다음과 같은 오류 얻을 :
[CompositionException: The composition produced a single composition error. The root cause is provided below. Review the CompositionException.Errors property for more detailed information.
1) Not implemented!
Resulting in: An exception occurred while trying to create an instance of type 'MyWebProject.Areas.Users.Controllers.JamController'.
Resulting in: Cannot activate part 'MyWebProject.Areas.Users.Controllers.JamController'.
Element: MyWebProject.Areas.Users.Controllers.JamController --> MyWebProject.Areas.Users.Controllers.JamController
Resulting in: Cannot get export 'MyWebProject.Areas.Users.Controllers.JamController (ContractName="System.Web.Mvc.IController")' from part 'MyWebProject.Areas.Users.Controllers.JamController'.
Element: MyWebProject.Areas.Users.Controllers.JamController (ContractName="System.Web.Mvc.IController")
]
System.ComponentModel.Composition.Hosting.CompositionServices.GetExportedValueFromComposedPart(ImportEngine engine, ComposablePart part, ExportDefinition definition) +55
System.ComponentModel.Composition.Hosting.CatalogExportProvider.GetExportedValue(CatalogPart part, ExportDefinition export, Boolean isSharedPart) +78
System.ComponentModel.Composition.Hosting.CatalogExport.GetExportedValueCore() +47
System.ComponentModel.Composition.Primitives.Export.get_Value() +57
System.ComponentModel.Composition.ExportServices.GetCastedExportedValue(Export export) +40
System.ComponentModel.Composition.<>c__DisplayClassa`1.<CreateStronglyTypedLazyOfT>b__6() +39
System.Lazy`1.CreateValue() +416
System.Lazy`1.LazyInitValue() +382
System.Lazy`1.get_Value() +75
MefContrib.Web.Mvc.<>c__DisplayClass4.<GetControllerType>b__0(Lazy`1 e) +53
System.Linq.WhereSelectEnumerableIterator`2.MoveNext() +204
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +381
System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
MefContrib.Web.Mvc.CompositionControllerFactory.GetControllerType(RequestContext requestContext, String controllerName) +412
System.Web.Mvc.DefaultControllerFactory.System.Web.Mvc.IControllerFactory.GetControllerSessionBehavior(RequestContext requestContext, String controllerName) +61
System.Web.Mvc.MvcRouteHandler.GetSessionStateBehavior(RequestContext requestContext) +122
System.Web.Mvc.MvcRouteHandler.GetHttpHandler(RequestContext requestContext) +33
System.Web.Mvc.MvcRouteHandler.System.Web.Routing.IRouteHandler.GetHttpHandler(RequestContext requestContext) +10
System.Web.Routing.UrlRoutingModule.PostResolveRequestCache(HttpContextBase context) +9709884
System.Web.Routing.UrlRoutingModule.OnApplicationPostResolveRequestCache(Object sender, EventArgs e) +82
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +699
을
제 질문은 "왜?" 왜이 컨트롤러를 인스턴스화하려고합니까? 이 문제를 일으키는 원인을 확인하려면 어디에서보아야합니까? 나는 "페이지를 찾을 수 없습니다"에서 모든 컨트롤러를 인스턴스화하는 것은 예상 된 동작이 아니라고 확신합니다.
나는 어디를 봐야할지 모르겠다. 누군가가 도움이 될 방향으로 나를 가리킬 수 있습니까?
UPDATE : 섹션 내 문제를 해결합니다 "컨트롤러에서 종속성을 해결하기 위해 MVC3에게"없이 주석 처리
// Tell MVC3 to use MEF as its dependency resolver.
var dependencyResolver = new CompositionDependencyResolver(catalog);
DependencyResolver.SetResolver(dependencyResolver);
// Tell MVC3 to resolve dependencies in controllers
ControllerBuilder.Current.SetControllerFactory(
new CompositionControllerFactory(
new CompositionControllerActivator(dependencyResolver)));
:
가 SetControllerFactory 방법은 아래의 문제를 일으키는 것으로 밝혀 내가 요청한 컨트롤러를 제외한 컨트롤러는 인스턴스화됩니다. 다행히 표준 Asp.Net 컨트롤러 해상도를 사용하지 않는 경우에만 필요합니다.
언제든지 해당 동작에 중단 점을 배치하고 스택 추적을 볼 수 있습니다. –
라우팅이 엉망이 되었습니까? – Leri
@Brad 스택 추적을 시도했습니다. 그것은 바로 System.ComponentModel.Composition으로 뛰어 들었고 어떤 사용자 코드도 건드리지 않았습니다. – Jonathan