在我使用 Unity IoC 容器的 MVC4 .NET4.5 Web 应用程序中,在 IoCContainerFactory.GetControllerInstance() 方法中,我们使用 ServiceLocator.Current.GetInstance 来获取控制器实例:
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
?我知道它试图找到什么策略,我也许可以更改该策略,以便它确实需要检查很多次。