나는 최근에 부트 스트랩 코드에 다음을 사용하여, 내 MVC 응용 프로그램에 유니티 차단을 추가했습니다 : 이상한 내가 가지고 내 편집기 템플릿을보고 있어요,유니티 차단 (AOP) 둔화 MVC 편집기 템플릿
private static void RegisterProfilingHooks(IUnityContainer container)
{
var registrations =
container.Registrations.Where(m => m.RegisteredType != m.MappedToType).Where(
m => m.RegisteredType.Name != "IProfilingService").Take(150).ToList();
foreach (var registration in registrations)
{
container.AddNewExtension<Interception>().Configure<Interception>().SetInterceptorFor(
registration.RegisteredType, new InterfaceInterceptor());
}
container.Configure<Interception>()
.AddPolicy("ProfilerPolicy")
.AddMatchingRule<NamespaceMatchingRule>(
new InjectionConstructor(new InjectionParameter("MyApp.*")))
.AddCallHandler<ProfilerHandler>(new ContainerControlledLifetimeManager());
}
을하지만 편집기 템플릿 당 약 2 초 (밀리 초 전,). 따라서 10 개의 요소가있는 폼은로드하는 데 10 초가 걸립니다.
기본적으로이 코드는 모든 IoC 등록에서 프로파일 링 처리기를 인터셉트하여 이러한 인스턴스에서 호출 된 모든 메소드를 프로파일 링 할 수 있습니다.
ProfilerPolicy 구성을 주석 처리 할 때도 문제가 발생하기 때문에 문제는 프로필러 처리기가 아닙니다.
그것은 foreach 루프이 원인을 확장 배선는 다음과 같습니다
foreach (var registration in registrations)
{
container.AddNewExtension<Interception>().Configure<Interception>().SetInterceptorFor(
registration.RegisteredType, new InterfaceInterceptor());
}
왜이 차단 코드 내 편집기 템플릿에이 기괴한 영향을 미칠까요?
추가 정보 : 나는 기본 패스 스루, 그리고 여전히 문제를 참조하도록 업데이트대로
나는 자신이 원인이 템플릿에 무엇이든을 배제했습니다. 예를 들어, 문자열 템플릿으로 사용 :
@model System.String
@Html.TextBoxFor(m => m)
나는 여전히 같은 타이밍을 얻는다.
어떻게 든이 요격으로 인해 우리의 견해가 끌리는 것을 찾지 못하거나 무엇이 있는지 알 수 없습니다. 이것이 제가 생각할 수있는 유일한 것입니다. 우리의보기 경로 정의는 꽤 솔직하다 : 당신은 루프에서 차단 확장 여러 번 추가하는 것처럼
AreaPartialViewLocationFormats = new[] {
"~/Areas/{2}/Views/Sublayouts/{1}/{0}.cshtml",
"~/Areas/{2}/Views/Renderings/{1}/{0}.cshtml",
"~/Areas/Global/Views/Shared/{0}.cshtml"
};
보인다. 필자는 컴파일러를 가지고 있지 않기 때문에 지금은 확인할 수 없지만 반드시 필요한 것은 아닙니다. 문제는 - 귀하의 경기 침체의 원인이 될 수 있습니까? –
아마도. 나는 가로 채기에 익숙하지 않으며,이 해결책이 최적이 아닐 가능성이 높습니다. 편집자 템플리트를 끌어 당기는 것만 보이는 이상한 것입니다. 다른보기 및 부분보기는 영향을받지 않습니다. 당신의 생각에 너무 감사드립니다. –
하지만 기본적으로 모든 등록에 대한 차단을 등록해야하지만 * 이미 *로드 된 상태입니다. (모든 등록에 대해 차단을 명시 적으로 추가하지 않으려합니다.) 반복하지 않고 추가하지 않고 모든 컨테이너 등록에 가로 채기를 적용하는 방법을 모릅니다. –