Question

Je voudrais améliorer ma page en combinant et minifying javascript et les fichiers CSS. Depuis MvcContrib contient déjà un projet appelé IncludeHandling, je pris un coup d'œil à ce qui m'a malheureusement laissé avec des questions sans réponses:

Il est tout à fait un ensemble d'interfaces et d'objets impliqués dans le processus. Maintenant, je suis en utilisant Ninject.Mvc, mais il semble que MvcContrib.IncludeHandling utilise un peu plus (? Adonné) DI? Puis-je travailler autour de cela? Quelqu'un at-il utilisé cela et peut partager des expériences?

En second lieu, les conseils que l'on entend souvent est de mettre un contenu statique sur des domaines différents de sorte que la demande ne contient pas les cookies et autres, ce qui rend beaucoup plus facile pour le serveur pour gérer la demande. Mais comment puis-je combiner cela avec la manipulation d'inclusion automatique - est pas nécessairement servi dans la même application

?

EDIT: Figured qu'il n'y a vraiment qu'un seul appel dans la résolution tout, je me demande vraiment pourquoi ils utilisent DI pour cela ... En pensant à une fourchette il ...

Était-ce utile?

La solution

Eh bien, MvcContrib.IncludeHandling utilise le DependencyResolver de MvcContrib pour trouver les composants nécessaires. Il est pas très bien documenté (voir l'exemple de site pour plus de détails, bien que dans ce cas utilise un injecteur personnalisé).

Par exemple, MvcContrib.Castle a un WindsorDependencyResolver pour ce conteneur IoC que vous pouvez imiter d'utiliser ninject (il peut y avoir quelque chose si vous Google autour). L'initialisation est assez bavard, mais va comme ceci (conteneur est le conteneur de Windsor, dans votre cas, utilisez 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));

De cette façon, vous pouvez enregistrer toutes les dépendances nécessaires. Prenez garde que vous avez besoin de la section includeHandler dans votre config web.

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

J'espère que cela a aidé.

Autres conseils

Consultez la Asp.Net Ajax Minifier. http://www.asp.net/ajaxlibrary/ajaxminquickstart.ashx

Il est livré avec MS Construire la tâche que vous pouvez configurer où Surchauffe il trouvera et Css rapetisser et les fichiers Js dans votre projet ...

Voici une version unité de la configuration DependencyResolver. Je l'ai fait comme une extension de conteneur 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));
    }
}

Il convient de noter que la configuration IncludeHandling n'est pas idéal pour une configuration de cluster Web, comme à cause de la façon dont il fait la mise en cache. Je devais rouler ma propre action du contrôleur qui a une liste de fichiers à combiner et rapetisser. Je peux fournir plus d'information si quelqu'un est intéressé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top