Шаблон подписи метода в библиотеке импорта - PullRequest
2 голосов
/ 28 ноября 2011

Я работаю над библиотекой импорта Script #, и у меня возникает следующая проблема:

Это вывод JavaScript, который я хочу,

o.addListener('resize', resizeHandler);

, и в библиотеке импорта этот метод выглядиткак

[ScriptName("addListener")]
public void AddListenerResize(string eventname, ResizeEventHandler callback)
{
...
}

Хотелось бы добиться этого с помощью такого атрибута, как

[ScriptNameTemplate("addListener('resize',{0})")]
public void AddListenerResize(ResizeEventHandler callback)
{
...
}

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

Конкретный вопрос о том, как бы вы достигли этого с помощью доступных инструментов.

Любой совет будет оценен

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011

Еще одно предложение - создать перечисление именованных значений, представляющее допустимые строковые значения для имени события.

Пример:

[Imported]
[NamedValues]
public enum Events {

    Resize = 0
}

И затем ваш API принимает параметр Events, а не строковый параметр eventName.

0 голосов
/ 01 декабря 2011

Я не уверен, поддерживает ли Script # такую ​​функцию.

Почему бы вам не превратить необработанный импортированный API в более удобный:

public class RawAPI
{
  [ScriptName("addListener")]
  public void AddListener(string eventname, ResizeEventHandler callback)
  {
  ...
  }
}

public class GoodAPI
{
  readonly RawAPI _RawAPI;      

  public void AddListenerResize(ResizeEventHandler callback)
  {
    _RawAPI.AddListener("resize", callback);
  }
}

Затем используйтетолько GoodAPI и забудь про опечатки.Я бы даже попытался сделать внутренний RawAPI, но это технически невозможно для метода библиотеки импорта.

...