最近、ブートストラップ コードで次を使用して、Unity Interception を 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"
};