C#, Как генерировать объект, реализовав различные интерфейсы динамично во времени выполнения?

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

Однако, если Вы работаете над клиентской машиной тогда, у Вас есть выбор или , Автоматизация делопроизводства использования или использование Office Открывает формат XML (см. ссылки ниже), который поддерживается Microsoft Office 2000 и или исходно или через пакеты обновления. Каждый отступает к этому, хотя то, что Вы не могли бы быть в состоянии встроить некоторые виды графиков или изображений, которые Вы хотите показать.

лучший способ пойти о вещах будет все зависеть красивый от того, сколько времени необходимо вложить капитал в разработку. Если Вы идете путем Автоматизации делопроизводства существует довольно много хороших учебных руководств там, которые могут быть найдены через Google и довольно просты учиться. Однако Открыть формат Office XML является довольно новым, таким образом, Вы могли бы найти, что кривая обучения была немного выше.

Office Открывает XML Iinformation

5
задан Timo Kosig 3 November 2009 в 10:04
поделиться

5 ответов

Попробуйте что-нибудь вроде LinFu.DynamicObject .

3
ответ дан 14 December 2019 в 01:10
поделиться

Используйте фреймворк для фиксации , например Moq ,

5
ответ дан 14 December 2019 в 01:10
поделиться

Может быть, вам не нужно делать это таким «динамическим».

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

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

Каждая конкретная реализация вашей абстрактной фабрики может сгенерировать несколько реализаций интерфейса на основе вашего типа устройства.

Пример:

 public interface IDeviceFactory
 {
      ISomething GetSomeInterface();
      ISomethingElse GetSomeOtherInterface();
 }

, а затем вы реализуете конкретную factory для каждого устройства:

public class SimpleDeviceFactory : IDeviceFactory
{
     public virtual ISomething GetSomeInterface()
     { return Something.Empty; }

     public virtual ISomethingElse GetSomeOtherInterface()
     { return new SomeSimpleConreteImplementation(); }
}

или, может быть:

public class ComplexDeviceFactory : IDeviceFactory
{
     public virtual ISomething GetSomeInterface()
     { return new ComplexStuff(); }

     public virtual ISomethingElse GetSomeOtherInterface()
     { return new EvenMoreComplexStuff(); }
}

И затем, наконец, вы создаете правильную фабрику для своего устройства:

1
ответ дан 14 December 2019 в 01:10
поделиться

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

Для заинтересованных,

0
ответ дан 14 December 2019 в 01:10
поделиться

.NET 4 может упростить задачу, вы можете использовать одну из уже упомянутых структур или перейти к системе. Маршрут отражения. Вы найдете множество образцов в Интернете.

Я делал и то, и другое в прошлом. Прокатываю свой собственный материал il.Emit и использую фреймворк (в моем случае Spring.NET). Для чего угодно, кроме тривиальных вещей, используйте один из фреймворков.

0
ответ дан 14 December 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: