2011-06-26 5 views
1

私はASP.NET MVC newbyeです。私はエンタープライズデザインパターンを学習し、実験しています。しかし、私はリソースを処分するという概念について何か不足し続けています。より具体的には、コントローラーコンストラクターにIFuncyRepositoryやIFuncyServiceのインプリメンテーションやコントローラーで使用される他の種類の "リソース"を注入するcontrollerFactoryのメカニズムに焦点を当てたいと思います(私の場合、IoCとしてStructureMapを使用しています)。IoCと自動Disposeの神秘的な世界を説明してください

私の質問は、これらの注入されたリソースが廃棄されるWHERE/IF/HOWです。

ガイドラインに従っている本はASP.NETデザインパターンです。これまでIDisposableを実装しているクラスが存在しないため、このことについての説明はできません。リソースの廃棄タスクがどこかで自動的に行われるように見える(おそらくIoC?)。 私はこれを理解することができないので、私は非常に迷惑な疑いにつながる私のアプリケーションのパフォーマンスについては確信できません!誰にも事前に

おかげで、私の懸念を返信したり共有します;)

答えて

2

経験則として、使い捨てオブジェクトの作成者はまた、同じオブジェクトのディスポーザーでなければなりません。したがって、カスタムIControllerFactoryからオブジェクトグラフを作成する場合は、そのReleaseControllerを廃止に使用する必要があります。

はここ城ウィンザーを使用した例です:

public class WindsorControllerFactory : DefaultControllerFactory 
{ 
    private readonly IWindsorContainer container; 

    public WindsorControllerFactory(IWindsorContainer container) 
    { 
     if (container == null) 
     { 
      throw new ArgumentNullException("container"); 
     } 

     this.container = container; 
    } 

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 
    { 
     return (IController)this.container.Resolve(controllerType); 
    } 

    public override void ReleaseController(IController controller) 
    { 
     this.container.Release(controller); 
    } 
} 
+0

ので、私はリソースを配置するコンテナでなければならないリソースを注入した容器を使用している場合は、このルールに従いました。実際には少しのグーグルの後、私は実際にStackoverflowとここにいくつかの質問が見つかりました。 リクエストが終了したときにわかっている限り、disposeメソッドはIoCによって自動的に呼び出されます。 構造マップの例は次のとおりです。 ObjectFactory.GetInstance ()。Dispose(); 私はこれについてグーグルで実験していきます。 ありがとうございます。 – user711643

+0

これはすべてのコンテナで異なりますが、ほとんどの場合、要求が終了するとリクエストスコープのオブジェクトを廃棄する傾向があります。しかし、オブジェクトグラフにはライフタイムスタイルが異なるオブジェクトがあるかもしれません。オブジェクトグラフを終えた時点で、オブジェクトグラフを明示的に解放することは良い考えです。 –

+0

これは大きな疑問を解決します。ありがとう! – user711643

関連する問題