2012-04-03 12 views
1

私はMVC3と一緒にNinjectを使用してコントローラの依存関係を注入しています。時々、コントローラのアクションが実行される前であっても、MVC Miniプロファイラで遅いタイミングが得られることがあります。私がその時間の前にはあまりしないので、私はそれが私の使い方の問題であるかもしれないと思った。 ninjectからタイミング情報を得る既存の方法はありますか?おそらく、依存関係の解決にどれくらいの時間がかかるかを記録するconfigオプションは、自分自身を追加する良い方法とは言えませんが、拡張またはラップできるクラスはありますか?mvc3 Webアプリケーションのプロファイルnyject

答えて

3

NinjectDependencyResolverのデコレータは、IDependencyResolverインターフェイスを実装してDependencyResolverに置き換えることで記述できます。

DependencyResolver.SetResolver(new ProfilingResolver(DependencyResolver.Current)); 

public class ProfilingResolver : IDependencyResolver 
{ 
    private readonly IDependencyResolver decoratedResolver; 

    public ProfilingResolver(IDependencyResolver decoratedResolver) 
    { 
     this.decoratedResolver = decoratedResolver; 
    } 

    public object GetService(Type serviceType) 
    { 
     using (MiniProfiler.Current.Step("Get_" + serviceType.Name)) 
     { 
      return this.decoratedResolver.GetService(serviceType); 
     } 
    } 

    public IEnumerable<object> GetServices(Type serviceType) 
    { 
     using (MiniProfiler.Current.Step("GetAll_" + serviceType.Name)) 
     { 
      return this.decoratedResolver.GetServices(serviceType); 
     } 
    } 
} 
+0

+1 Doh!ニース... –

+0

将来の参照のために、それは実際にninjectではありません! – olle

1

まず、私のデフォルトの回答は次のようになります -

私はDIがプロファイルに興味深いものの統計学的に有意な割合として現れて見たことがありません。 Go Compose

(この投稿はコメントとしての人生を始めました: - @olleはあなたがソースを見ましたか?解決プロセスを「包む」比較的簡単な拡張があり、grokにはあまりにも複雑ではありません。ミニプロファイラーを使って、物事を詰めるのはかなり簡単ですが、これは比較的単純な拡張機能のようです。これはフォーラムに参加するPITAの応答ですが、私は個人的には使えると言われて感謝しています。数年前の情報源です.Ninjectコードベースとそのテストは、読んでもかまいません。

+1

いいえ私はその答えを分かりやすく評価しています。ソースを覗き込んだだけで、既に存在していたラッパー/機能などがあるかどうかを確認したかったのです。 – olle

+1

@olle Cool。しかし本当の答えを与えるために周りにRemoを持っていることは素晴らしい:D –

関連する問題