Вопрос

Я хотел бы улучшить свою страницу, объединив и минифицировав JavaScript и CSS файлы.С MVCContrib уже содержит проект под названием IncludeHandling, я взглянул на то, что, к сожалению, оставило у меня вопросы без ответа:

В этом процессе участвует довольно много интерфейсов и объектов.Теперь я использую Ninject.Mvc, но кажется, что MvcContrib.IncludeHandling использует какой-то дополнительный (самодельный?) DI?Могу ли я обойти это?Кто-нибудь использовал это и может поделиться опытом?

Во-вторых, часто можно услышать совет: размещать статический контент в разных доменах, чтобы запрос не содержал файлы cookie и тому подобное, что значительно упрощает обработку запроса сервером.Но как я могу совместить это с автоматической обработкой включения - разве это не обязательно выполняется в одном и том же приложении?

РЕДАКТИРОВАТЬ:Понял, что на самом деле во всем этом есть только один вызов разрешения, мне действительно интересно, почему они используют для этого DI...Думаю о вилке там...

Это было полезно?

Решение

Хорошо, MvcContrib.IncludeHandling использует MvcContrib DependencyResolver найти необходимые компоненты.Он не очень хорошо документирован (более подробно см. образец сайта, хотя в этом случае используется специальный инжектор).

Например, MvcContrib.Castle имеет WindsorDependencyResolver для этого контейнера IoC, который вы можете имитировать, используя NInject (может быть что-то есть, если вы погуглите).Инициализация довольно подробная, но выглядит следующим образом (контейнер — это контейнер 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));

Таким образом, вы можете зарегистрировать все необходимые зависимости.Помните, что вам нужен раздел includeHandler в вашей веб-конфигурации.

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

Надеюсь, это помогло.

Другие советы

Ознакомьтесь с минификатором Ajax Asp.Net. http://www.asp.net/ajaxlibrary/ajaxminquickstart.ashx

Он поставляется с задачей MS Build, которую вы можете настроить, где при сборке она будет находить и минимизировать файлы Css и Js в вашем проекте...

Вот версия установки 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 не идеальна для настройки веб-кластера из-за способа кэширования.Мне пришлось реализовать собственное действие контроллера, которое требовало объединения и минимизации списка файлов.Могу предоставить дополнительную информацию, если кому интересно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top