2010-03-12 3 views
2

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

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

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

EDIT: Фигурная, что есть на самом деле только один вызов решительность в целом вещь, я действительно задаюсь вопросом, почему они используют DI для этого ... Думая о вилке там ...

+0

Как вы его решили? Я сталкиваюсь с той же проблемой. –

+0

Выяснил это после загрузки источника. Вы правы, это немного смешно. Это не должно требовать рамки DI. Как хромой. –

+1

Я не слишком доволен MvcContrib в целом - на самом деле, удаление зависимости от него в моем списке задач на следующей неделе ... Я в настоящее время надеюсь на решение типа .csjs, которое может поставляться с бритвой просмотреть двигатель и mvc3, в противном случае я откажусь от своего собственного. – mnemosyn

ответ

2

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

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

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

0

Заканчивать Асп. Net Ajax Minifier. http://www.asp.net/ajaxlibrary/ajaxminquickstart.ashx

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

0

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

Смежные вопросы