2009-09-11 4 views
1

Во-первых, я не говорю о новом «динамическом» ключевом слове n C# 4.0. :) Я считаю, мне нужно идти в другую сторону ...C# динамические классы во время выполнения?

Я хочу, чтобы класс с кодом/временем разработки был создан из набора файлов XML или файлов/папок и т. Д. Все, что я может произойти с изменением внешнего источника.

Возможно ли это с C#? Я знаю, что это возможно с некоторым усложнением времени разработки какого-либо скрытого имени класса или чего-то еще (т. Е. Встроенных свойств для каждого проекта).

Есть ли более простой способ сделать это? Почти как динамическое перечисление? Вот что я пытаюсь сделать:

public static class MenuItems 
{ 
} 

И во время разработки, я хочу свойства (или методы/поля, если это проще) добавлено на основе определения XML файла. Как:

<MenuItems> 
    <Item>Homepage</Item> 
    <Item>Portfolio</Item> 
    <Item>About</Item> 
    <Item>Contact</Item> 
</MenuItem> 

Затем, при кодировании в конструкторе я имел бы IntelliSense, как:

if (page.ToString == MenuItems.Homepage)... 
if (page.ToString == MenuItems.Portfolio)... 

Обратите внимание, как свойства были определены в XML, и добавил к классу во время разработки?

Заранее благодарен!

+0

«частичные» классы могут быть полезными. –

+0

Вы ищете аналогичный опыт для кода C#, который генерируется для файлов ресурсов? –

+0

@nader: Да, почти такой опыт! Вы генерируете новую запись в ресурсе, и у вас есть ее во время разработки с помощью ResourceManager.MyResourceName. Да! – eduncan911

ответ

3

Вы можете использовать T4 Templates для генерации исходного кода. Он хорошо поддерживается Microsoft и используется для нескольких проектов, включая ASP.NET MVC, и вскоре ADO.NET Entity Framework.

+0

Отличная точка. Но, T4 шаблоны должны генерировать исходный код. Я ищу динамическое решение. Вступают в силу практически изменения в реальном времени. – eduncan911

+0

Отметить это как ответ на данный момент. Кажется, я слишком много хочу от C#.:) – eduncan911

+0

Если вы хотите, чтобы ваш класс генерировался целиком во время выполнения, то как должен компилироваться остальная часть вашего кода (который ссылается на членов этого класса)? Или где IDE получит информацию, необходимую для показа подсказок IntelliSense? –

1

Если я могу направить ваше внимание на ASP.NET Membership Provider и Web.sitemap, возможно, это поможет вашей реальной проблеме.

+0

Справа. Они создают свойства времени разработки. Я ищу кого-то, кто уже сделал работу с ногами. :) Провел несколько дней, переделывая свои собственные решения, которые не сработали ... :) – eduncan911

+0

Но что именно вы пытаетесь сделать? Я предполагаю, что вы хотите либо скрыть/показать соответствующие ссылки на основе роли, а также предотвратить доступ на основе роли. То, что я связал, делает это. Если вы ищете только стиль, основанный на имени, вы делаете это на одной странице или аналогично. Что вы на самом деле пытаетесь сделать? –

+0

Я не уверен, где вы получаете «Роль» или членство в моем первоначальном вопросе. :) Я прошу создать динамический класс из файла конфигурации во время выполнения. T4 Шаблоны, упомянутые Мэттом, делают это; но он должен быть скомпилирован, чтобы сгенерировать этот код раньше времени. Я ищу что-то почти в режиме реального времени, т. Е. Имеет зависимость от xml-файла, и если xml изменяется, он генерирует новую версию класса. – eduncan911

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