В моем MVC4 веб-приложении .NET4.5 с использованием контейнера Unity IoC в методе IoCContainerFactory.GetControllerInstance() мы используем ServiceLocator.Current.GetInstance для получить экземпляр контроллера:ServiceLocator.Current.GetInstance вызывает чрезмерное количество вызовов ObjectBuilder2.PolicyList.GetNoDefault
public class IoCControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(
System.Web.Routing.RequestContext requestContext, Type controllerType)
{
// snip other code
// this is the problem line:
return ServiceLocator.Current.GetInstance(controllerType) as IController;
}
}
Но это было слишком медленно. Используя продукт JetBrains DotNetTrace, я обнаружил, что ServiceLocator.Current.GetInstance, по-видимому, вызывает ObjectBuilder2.PolicyList.GetNoDefault более миллиона раз. Как я могу понять, почему он делает так много звонков, и что я могу сделать, чтобы исправить эту проблему? Прикрепленный скриншот показывает результат dotnetTrace:
И какую политику она пытается получить в методе PolicyList.GetNoDefault
? Я знал, какую политику пытался найти, я мог бы изменить эту политику, чтобы ее нужно было проверять много раз.