Повторное использование архитектура MVC; Имейте два слоя UI: ASP.NET MVC и.NET Winforms

Или вы можете поместить эту строку в свой файл Global.asax.cs в разделе Application_Start ():

System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<ProjectName.Path.Context>());

Обязательно измените имя_проекта.Path.Context на свое пространство имен и контекст. Если сначала использовать код, это приведет к удалению и созданию новой базы данных всякий раз, когда будут внесены какие-либо изменения в схему.

8
задан tereško 13 July 2012 в 07:48
поделиться

2 ответа

Я сделал это ранее, не с asp.net MVC, а с чистыми веб-формами asp.net. Я использовал MVP собственной разработки (Образцовый Предъявитель Представления) шаблон, и абсолютная самая важная вещь позволить Предъявителю (== Контроллер в Вашем случае) использоваться в приложении WinForms не состояла в том, чтобы сослаться ни на что, чтобы сделать с system.web

Таким образом, первая вещь, которую необходимо сделать, представляют интерфейс (интерфейсы) для обертывания любого запроса, ответа, сеть и т.д. наполняют и сделали, чтобы каждый Предъявитель принял эти интерфейсы через Внедрение зависимости (или сделайте их доступными для Предъявителей некоторой другой техникой), затем если Предъявитель использует их, а не фактический материал system.web.

Пример:

Предположите, что Вы хотите передать управление от Страницы A до Страницы B (который в Вашем приложении winforms Вы могли бы хотеть закрыть, формируют затем открытую форму B).

Интерфейс:

public interface IRuntimeContext
{
  void TransferTo(string destination);
}

веб-реализация:

public class AspNetRuntimeContext
{
  public void TransferTo(string destination)
  {
    Response.Redirect(destination);
  }
}

реализация winforms:

public class WinformsRuntimeContext
{
  public void TransferTo(string destination)
  {
    var r = GetFormByName(destination);
    r.Show();
  }
}

Теперь Предъявитель (Контроллер в Вашем случае):

public class SomePresenter
{
  private readonly runtimeContext;
  public SomePresenter(IRuntimeContext runtimeContext)
  {
    this.runtimeContext = runtimeContext;
  }

  public void SomeAction()
  {
    // do some work

    // then transfer control to another page/form
    runtimeContext.TransferTo("somewhereElse");
  }
}

Я не посмотрел на реализацию MVC asp.net подробно, но я надеюсь, что это дает Вам некоторый признак, что это, вероятно, будет большая работа для включения сценария, который Вы после.

Можно вместо этого хотеть рассмотреть принятие, что необходимо будет повторно кодировать Представление и Контроллер для различных платформ, и вместо этого сконцентрироваться на хранении чрезвычайно тонких контроллеров и помещение объема кода на уровне служб, который может быть совместно использован.

Удачи!

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

Взгляните на стартовый комплект Northwind (не откладывайте на бит Northwind), который имеет различные графические интерфейсы, прикрепленные к многоуровневой архитектуре, включая как MVC, так и Winforms.

Он делает именно то, что вы хотите достичь.

2
ответ дан 5 December 2019 в 14:07
поделиться
Другие вопросы по тегам:

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