Мой проект требует основного приложения, которое выступает в качестве центральной точки для небольших приложений в стиле приложений для взаимодействия с гораздо более крупной центральной системой.Это телевизионные приложения, поэтому не думайте, что они мобильные.Большинство приложений смогут ссылаться на это ядро без дополнительного кода.Тем не менее, некоторые приложения (которые не известны в настоящее время), скорее всего, должны иметь дополнительную функциональность.Я хочу поддержать эту дополнительную функциональность с помощью модели плагинов, которая позволяет расширять функциональность ядра без изменения ядра.Поскольку источник может быть недоступен разработчику плагина.Я хочу использовать EF Code First, чтобы позволить подключаемым модулям расширять модель данных.
Например, я могу определить сущность User, и им может потребоваться расширить ее для поддержки CustomUser: User.Я хотел бы построить таблицу для этого как:
modelBuilder.Entity<User>()
.Map(m => m.ToTable("User"))
.Map<CustomUser>(m => m.ToTable("CustomUser")); // Would like this portion provided by plug-in
Я знаю, что это работает, если вы делаете все это сразу, но я не вижу, как вытащить мое отображение из плагина.Я попытался разделить его на два утверждения, такие как:
Core
modelBuilder.Entity<User>()
.Map(m => m.ToTable("User"));
Плагин
modelBuilder.Entity<User>()
.Map<CustomUser>(m => m.ToTable("CustomUser"));
Однако, когда он запускается, я получаю сообщение об ошибке, утверждающее, что сущность Userдолжен быть определен в одном операторе сопоставления.
Итак, до сих пор я пытался выяснить, как передать только информацию сопоставления из подключаемого модуля, прежде чем я определю свою сущность User, но несм. способ передать его во время выполнения, так как проект Core не знает о подключаемых модулях "CustomUser".
Если необходимы дополнительные разъяснения, пожалуйста, спросите.
Редактировать 1: Какточка информации.Я следил за этим постом здесь и могу копировать его функциональность, но он не позволяет мне строить отношения, которые я ищу.Если только я что-то упустил.
Редактировать 2: Проводя дополнительные исследования, я обнаружил, что могу построить свою конфигурацию отображения, как в этом посте , но я не могу понять, как передать свойКонфигурация в один раз создана.В настоящее время я использую MEF, но я готов попробовать другой метод.Я слышал, что Ninject может делать подобные вещи, но мне не ясно, как это работает.