Как сделать wx.TextEntryDialog больше и с изменяемым размером

Использование GWT У меня есть класс Java:

public class Pojo {
  private String name;
  public String getName() { return name; }
  public void setName(String name) { this.name = name; }
}

Вышеупомянутый класс совместно используется клиентским и серверным кодом.

Из клиентского кода я хотел бы получить динамический доступ к свойству . То есть, я хотел бы написать метод со следующей сигнатурой:

public String getProperty(Object o, String propertyName)

Чтобы следующий код работал:

Pojo pojo = new Pojo();
pojo.setName("Joe");
getProperty(pojo, "name");    // this should return "Joe"

Очевидно, что отражение Java отсутствует. И я пробовал следующий метод JSNI:

public static native String getProperty(Object o, String name) /*-{
  return o[name];
}-*/;

Но это не работает.

Специальный синтаксис для доступа к объектам Java из JavaScript также не может использоваться, поскольку я хочу, чтобы он был динамическим.

Есть идеи, как я могу это сделать?

Для полноты, я также хочу иметь возможность динамически устанавливать свойство.

РЕДАКТИРОВАТЬ: ответ blwy10 был отличным советом, который помог мне выполнить поиск с помощью " gwt reflection "вместо таких терминов, как"

Глядя на сообщение Карла Сегина, в котором он показывает, что проектирование с учетом тестируемости приводит к лучшему дизайну, в данном случае композиция важнее наследования .

В этом примере его CachedEmployeeLookup зависит от EmployeeLookup , которые реализуют один и тот же интерфейс, IEmployeeLookup

Как бы вы настроили это в StructureMap, чтобы что программа по умолчанию использует класс CachedEmployeeLookup , в то время как CachedEmployeeLookup получает введенный ему EmployeeLookup ?

1
задан Kirschstein 26 August 2010 в 13:50
поделиться

2 ответа

Я думаю, что-то вроде этого будет работать:

For<IEmployeeLookup>().Add<EmployeeLookup>().
   Named("employeeLookup");

For<IEmployeeLookup>().Use<CachedEmployeeLookup>()
  .Ctor<IEmployeeLookup>().Is(
     d => d.TheInstanceNamed("employeeLookup"));
1
ответ дан 2 September 2019 в 21:50
поделиться

Вы можете использовать EnrichWith при настройке сопоставления типов, например

ObjectFactory.Initialize(i =>
{
    i.For<IDecorator>().Use<Inner>().EnrichWith(d => new Decorator(d));
});

На этой странице есть несколько примеров перехвата в StructureMap

1
ответ дан 2 September 2019 в 21:50
поделиться
Другие вопросы по тегам:

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