T4MVC Использование методов расширения в библиотеке управления

Я написал несколько помощников бритвы, и эти помощники используют функции, включающие методы расширения, сгенерированные T4MVC. Теперь я хочу переместить их в библиотеку управления, чтобы их можно было использовать в нескольких приложениях mvc. Первоначальная идея, которую я использовал, заключалась в том, что я могу поместить копию шаблона в библиотеку управления, и это работает, недостатком является то, что шаблон, используемый в приложении, затем повторно генерирует те же методы расширения в том же пространстве имен. Поскольку я использую некоторые расширения, требующие интерфейса для ActionResult, мне нужно, чтобы пространство имен оставалось прежним.

Мне интересно, есть ли известный способ использования расширений в библиотеке управления, а также приложение, которое ссылается на библиотеку, или требуется изменение шаблона, чтобы статические методы расширения могли быть сгенерированы или нет через флаг в файле настроек? Мне также интересно, можно ли включить статические расширения в отдельный файл cs, который находится рядом с шаблоном. Чтобы у нас было 2 класса T4Extensions и DynamicT4Extensions?

Однако это может привести к использованию интерфейса IT4MVCActionResult,


person Dewy    schedule 06.04.2011    source источник


Ответы (1)


Это похоже, но не совсем то же самое, что и http://forums.asp.net/p/1510753/3603100.aspx.

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

Хотя это все равно может взорваться, если у вас есть несколько несвязанных библиотек, каждая из которых должна использовать методы, поскольку приложение тогда получит неоднозначную ссылку.

Обратите внимание, что мы не можем сделать методы внутренними, так как некоторые из них нужно вызывать из представлений, которые находятся в разных сборках.

И в идеале я бы предпочел не размещать их в отдельном файле, поскольку некоторые пользователи могут начать жаловаться, что T4MVC загружает слишком много файлов.

Извините, не очень четкий ответ, но больше размышлений о возможностях. :)

person David Ebbo    schedule 06.04.2011
comment
Я думаю, что переключатель будет работать хорошо и удовлетворит, по крайней мере, мои потребности. Что касается наличия ссылок во многих несвязанных библиотеках, они станут связанными, поскольку все они будут использовать один и тот же интерфейс, и поэтому у них должна быть по крайней мере одна общая ссылка, в которой, я думаю, должны жить методы. Кроме того, дополнительный файл, действительно ли это проблема, пока кто-то не скажет, что это проблема, я думаю, что 3 файла в порядке для мощности того, что люди получают, но это мнение только одного человека. Какой следующий шаг? - person Dewy; 07.04.2011
comment
Возможно, вы правы в том, что наличие лишнего файла не имеет большого значения. Мы также могли бы рассмотреть возможность размещения всех этих файлов в папке T4MVC вместо того, чтобы размещать их в корневом каталоге приложения. Следующий шаг? Думаю, мне нужно найти время, чтобы поработать над этим :) - person David Ebbo; 08.04.2011
comment
Я только что опубликовал T4MVC 2.6.50, в котором добавлен новый флаг GenerateMvcT4Extensions, который можно отключить в файле настроек. Пожалуйста, попробуйте и отметьте этот ответ как ответ, если он работает для вас. - person David Ebbo; 08.04.2011
comment
Обратите внимание, что я решил не добавлять новый файл прямо сейчас, так как это было бы более масштабным изменением (это можно будет рассмотреть позже). - person David Ebbo; 08.04.2011
comment
Привет, Дэвид, я думаю, нам все еще нужны некоторые изменения. Dummy Instance создается как в библиотеке, так и в веб-приложении. Он компилируется, но выдает предупреждения. В моем сценарии класс MVC, созданный в библиотеке, пуст и вызывал конфликты, пока я не понял, что вы можете изменить его имя на другое. Возможно, стоит сделать это более очевидным в примечании к выпуску. (Может и нет, я новичок в настройках!) - person Dewy; 11.04.2011
comment
Основная проблема, с которой я столкнулся, заключается в том, что метод InitMVCT4Result не добавит строку кода Area, так как есть условие, что в содержащем приложении должна существовать хотя бы 1 область, а поскольку в библиотеке нет областей, не добавляются, но есть в содержащем веб-приложении. Это означает, что ссылки не работают. Я так понимаю, наличие этой линии при отсутствии областей вызовет проблемы? - person Dewy; 11.04.2011
comment
Мне достаточно легко добавить папку областей и фиктивную подпапку в библиотеку, но было бы неплохо, если бы мне не пришлось этого делать. - person Dewy; 11.04.2011
comment
Поскольку у вас все настроено таким образом, можете ли вы попробовать внести изменения, которые считаете правильными, а затем отправить мне измененные файлы по электронной почте? Спасибо! - person David Ebbo; 12.04.2011
comment
Отправил письмо по этому поводу. Кстати, не знаю, где это спросить: знаете ли вы, есть ли какие-либо планы разрешить общие помощники? Кажется дерьмом иметь множество кода, позволяющего использовать универсальные модели просмотра, а затем сказать, что трудно понять, являются ли его дженериками или html при вызове помощника. Не знаю, у кого это спросить. Так что не стесняйтесь игнорировать - person Dewy; 12.04.2011
comment
просто столкнулся с точно такой же проблемой. У меня есть собственные расширения для помощников html в отдельном решении. Затем я ссылаюсь на это решение в других своих проектах, делая эти помощники доступными во всех моих проектах. Чтобы использовать T4MVC, мне пришлось написать в этом эталонном проекте еще несколько помощников html, которые использовали бы расширения html из T4MVC.cs. Теперь у меня есть T4MVC.cs как в эталонном проекте, так и в фактическом проекте приложения, что заставляет его жаловаться на неоднозначные ссылки для нескольких вещей. Вы пришли к решению этой проблемы? - person Dmitry Efimenko; 06.07.2012
comment
Чтобы обсудить возможные изменения, см. соответствующую ветку: t4mvc.codeplex.com/discussions/362362 - person David Ebbo; 07.07.2012
comment
Это изменение находится в стадии бета-тестирования! Пожалуйста, убедитесь, что это работает для вас. Подробнее см. t4mvc.codeplex.com/discussions/362362. - person David Ebbo; 31.10.2012