2

CSSjavascriptとファイルを組み合わせて縮小してページを改善したいです。MVCContribには既に というプロジェクトが含まれているためIncludeHandling、それを調べてみましたが、残念ながら未回答の質問が残りました。

このプロセスにはかなりの数のインターフェイスとオブジェクトが含まれます。今、私は を使用していますが、追加の (自作の?) DI を使用しNinject.Mvcているようです。MvcContrib.IncludeHandlingこれを回避できますか? 誰かがこれを使用し、いくつかの経験を共有できますか?

第 2 に、よく耳にするアドバイスは、静的コンテンツを別のドメインに配置して、リクエストに Cookie などが含まれないようにし、サーバーがリクエストを処理しやすくすることです。しかし、これを自動包含処理とどのように組み合わせることができますか?それは必ずしも同じアプリケーションで提供されるのではないでしょうか?

編集:全体で本当に単一の解決呼び出しがあると考えました.なぜ彼らはそのためにDIを使用するのか本当に疑問に思います...そこでフォークについて考えています...

4

3 に答える 3

2

さて、必要なコンポーネントを見つけるためにMvcContrib.IncludeHandlingMvcContribを使用します。DependencyResolver十分に文書化されていません(詳細についてはサンプルサイトを参照してください。ただし、その場合はカスタムインジェクターを使用します)。

たとえば、 NInjectを使用MvcContrib.CastleするWindsorDependencyResolverために模倣できるそのIoCコンテナがあります(Googleの周りに何かがあるかもしれません)。初期化は非常に複雑ですが、次のようになります(コンテナーはWindsorコンテナーであり、この場合はNInjectを使用します)。

var httpContextProvider = new HttpContextProvider(HttpContext.Current);
var settings = IIncludeHandlingSettings)ConfigurationManager.GetSection("includeHandling");

container.Register(Component.For(typeof(IIncludeReader)).ImplementedBy(typeof(FileSystemIncludeReader)));            

container.Register(Component.For(typeof(IIncludeStorage)).ImplementedBy(typeof(StaticIncludeStorage)));           
container.Register(Component.For(typeof(IKeyGenerator)).ImplementedBy(typeof(KeyGenerator)));
container.Register(Component.For(typeof(IIncludeHandlingSettings)).Instance(settings));
container.Register(Component.For(typeof(IHttpContextProvider)).Instance(httpContextProvider));
container.Register(Component.For(typeof(IIncludeCombiner)).ImplementedBy(typeof(IncludeCombiner)));
container.Register(Component.For(typeof(IncludeController)).ImplementedBy(typeof(IncludeController)).LifeStyle.Transient);

DependencyResolver.InitializeWith(new WindsorDependencyResolver(Container));

このようにして、必要なすべての依存関係を登録できます。Web構成にincludeHandlerセクションが必要であることに注意してください。

<configSections>
    <section name="includeHandling" type="MvcContrib.IncludeHandling.Configuration.IncludeHandlingSectionHandler, MvcContrib.IncludeHandling"/>
</configSections>
<includeHandling>
</includeHandling>

これがお役に立てば幸いです。

于 2010-11-24T11:58:43.117 に答える
0

DependencyResolver セットアップの Unity バージョンを次に示します。Unity コンテナー拡張機能として実行しました。

public class ConfigureMvcContrib : UnityContainerExtension
{
    protected override void Initialize()
    {
        var settings = (IIncludeHandlingSettings)ConfigurationManager.GetSection("includeHandling");

        Container
            .RegisterFactory<IHttpContextProvider>(c => new HttpContextProvider(HttpContext.Current))
            .RegisterFactory<IIncludeReader>(c => new FileSystemIncludeReader(c.Resolve<IHttpContextProvider>()))
            .RegisterType<IIncludeStorage, StaticIncludeStorage>()
            .RegisterType<IKeyGenerator, KeyGenerator>()
            .RegisterFactory<IIncludeCombiner, IncludeCombiner>()
            .RegisterInstance<IIncludeHandlingSettings>(settings);

        DependencyResolver.InitializeWith(new UnityDependencyResolver(Container));
    }
}

IncludeHandling のセットアップは、キャッシングの方法が原因で、そのままでは Web クラスターのセットアップには理想的ではないことに注意してください。結合して縮小するファイルのリストを取得する独自のコントローラーアクションをロールバックする必要がありました。誰かが興味を持っているなら、私はより多くの情報を提供できます。

于 2011-03-15T21:50:18.270 に答える
0

Asp.Net Ajax Minifier を確認してください。http://www.asp.net/ajaxlibrary/ajaxminquickstart.ashx

ビルド時にプロジェクト内のCssおよびJsファイルを見つけて縮小する場所をセットアップできるMSビルドタスクが付属しています...

于 2010-10-01T15:06:41.407 に答える