ASP.NET MVC アプリケーションにカスタム リソース プロバイダーを挿入するためにこのアプローチを採用しましたが、オブジェクトの有効期間の管理に問題があります。
私は Castle Windsor を使用しているので、ファクトリの次の実装があります。
public class DefaultResourceProviderFactory : ResourceProviderFactory
{
public override IResourceProvider CreateGlobalResourceProvider(string classKey)
{
// IoC is a static helper class that gives me static access to the
// container. IoC.Resolve<T>(args...) simply calls container.Resolve<T>(args...).
return IoC.Resolve<IResourceProvider>(new { resourceType = "Global" });
}
public override IResourceProvider CreateLocalResourceProvider(string virtualPath)
{
// resourceType
return IoC.Resolve<IResourceProvider>(new { ResourceType = virtualPath });
}
}
しかし、IResourceProvider
コンテナに登録した は、有効期間が正しく管理されていないようです。独自の依存関係が他にもいくつかあり、そのうちのいくつかは (Web 要求ごとまたはトランザクションごとに) やや複雑なライフスタイルを持っているIResourceProvider
ため、依存関係が常に有効であることを確認するために一時的なものとして登録しました。しかし、MVC フレームワークは、次の要求で依存関係が無効になったときに発生するIResourceProvider
Web 要求全体への参照を保持して、足を踏んでいます。ObjectDisposedExceptions
私がやりたいのは、MVC フレームワークが my のインスタンスを必要とするたびIResourceProvider
にファクトリを使用するようにすることです。また、可能であればIoC.Release(provider)
、それが完了したときに呼び出しまたは同様のことも行います。
IResourceProvider
MVC フレームワークが尊重する方法で、カスタムのライフスタイルを細かく管理するにはどうすればよいですか?