зависимости между представлением, докладчиком и интерфейсом - PullRequest
2 голосов
/ 21 сентября 2010

Я нахожусь перед классической проблемой циклических зависимостей, но решение, которое я нашел (создать третью сборку), похоже, не подходит для моего шаблона представления представления.

Мне нужно сослаться на моего докладчика в моем представлении сборки Мне нужно сослаться на мой интерфейс (который находится в той же сборке, что и презентатор) в моей сборке вида

хорошо, поэтому я ссылаюсь на мою сборку презентатора / интерфейса в представлении, поскольку они все находятся в одном месте.

и теперь возникает проблема: Мне нужно сослаться на мое представление в моей сборке презентатора / интерфейсов, чтобы иметь возможность использовать один из моих типов представления (не системный тип, пользовательский элемент управления) для определения свойства и методов доступа в моем интерфейсе. Я не могу из-за циклической зависимости, и я думаю, что даже если я перенесу свой интерфейс в третью сборку, у меня всегда будет компакт-диск между этой новой сборкой и представлением (потому что мое представление нуждается в моем интерфейсе, а мой интерфейс нуждается в моем вид)

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

Нелегко быть ясным, поэтому не стесняйтесь спрашивать меня больше,

Большое спасибо всем заранее.

С уважением.

1 Ответ

1 голос
/ 21 сентября 2010

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

Пример:

Interface.dll:

public interface IMyView { string title; }
public interface IMyPresenter { string GetTitle(); }

View.dll:

public MyView : IMyView
{
    private IMyPresenter _myPresenter;
    public string Title { get { return _myPresenter.GetTitle(); } }
}

Presenter.dll:

public MyPresenter : IMyPresenter
{
    private IMyView _myView;

    public string GetTitle()
    {
        return ResourceManager["titleResource"];
    }
}

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

...