Pregunta

Me gustaría mejorar mi página combinando y minifying javascript y archivos CSS. Desde MVCContrib ya contiene un proyecto llamado IncludeHandling, di un vistazo a lo que por desgracia me dejó con preguntas sin respuesta:

Hay bastante un conjunto de interfaces y objetos involucrados en el proceso. Ahora estoy usando Ninject.Mvc, pero parece que MvcContrib.IncludeHandling está usando alguna adicional (hecho en casa?) DI? ¿Puedo evitar esto? nadie ha usado este y puede compartir algunas experiencias?

En segundo lugar, el asesoramiento que se oye a menudo es poner el contenido estático en dominios diferentes por lo que la solicitud no contiene galletas y similares, por lo que es mucho más fácil para el servidor para manejar la petición. Pero, ¿cómo puedo combinar esto con la administración automática de inclusión - no es que necesariamente se sirve en la misma aplicación

?

EDIT: pensó que no es en realidad una sola llamada resolución en todo el asunto, me pregunto por qué usan DI para que ... Pensando en un tenedor allí ...

¿Fue útil?

Solución

Bueno, MvcContrib.IncludeHandling utiliza DependencyResolver de MvcContrib para encontrar los componentes necesarios. No está muy bien documentada (véase el sitio de ejemplo para más detalle, aunque en ese caso utiliza un inyector de costumbre).

Por ejemplo, MvcContrib.Castle tiene una WindsorDependencyResolver para ese contenedor IoC que puede imitar a utilizar ninject (puede haber algo si Google alrededor). La inicialización es bastante detallado, pero es la siguiente (contenedor es el contenedor de Windsor, en su caso, utilizar 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 esta manera se puede registrar todas las dependencias que son necesarias. Tenga en cuenta que lo que necesita la sección includeHandler en su web.config.

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

Espero que esto ayudó.

Otros consejos

Salida del Asp.Net Ajax Minifier. http://www.asp.net/ajaxlibrary/ajaxminquickstart.ashx

Viene con una MS Construir tarea que se puede configurar en donde edifican encontrará y Css Minify y archivos JS en su proyecto ...

Esta es una versión Unidad de la configuración DependencyResolver. Lo hice como una extensión de la Unidad de contenedores.

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));
    }
}

Vale la pena señalar que la configuración IncludeHandling no es ideal para una configuración de clúster web como es debido a la manera que lo hace el almacenamiento en caché. Tenía que rodar mi propia acción del controlador que tuvo una lista de archivos para combinar y minify. Puedo proporcionar más información si alguien está interesado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top