В нашем продукте мы называем "сервисы", которые являются основным средством коммуникации между различными частями продукта (и особенно между языками - внутренним языком, C, Python и .NET).
В настоящее время код выглядит следующим образом (Services.Execute
используя params object[] args
):
myString = (string)Services.Execute("service_name", arg1, arg2, ...);
Я бы предпочел написать код, подобный этому, и получить преимущества проверки типов и менее подробного кода:
myString = ServiceName(arg1, arg2, ...);
Это может быть достигнуто с помощью простой функции
public static string ServiceName(int arg1, Entity arg2, ...)
{
return (string)Services.Execute("service_name", arg1, arg2, ...);
}
Но это довольно многословно, и не так легко управлять, когда делаете это для множества услуг, как я намереваюсь делать.
Увидев, как работают extern
и DllImportAttribute
, я надеюсь, что с ним можно будет связать это следующим образом:
[ServiceImport("service_name")]
public static extern string ServiceName(int arg1, Entity arg2, ...);
Но я не знаю, как добиться этого вообще и не могу найти никакой документации для него (extern
кажется довольно неопределенно определенным вопросом). Самое близкое, что я нашел, - это несколько связанный с этим вопрос, Как предоставить пользовательскую реализацию для extern-методов в .NET?, которая на самом деле не отвечала на мой вопрос и несколько отличается, так или иначе. Спецификация языка С# (особенно в версии 4.0, раздел 10.6.7, "Внешние методы" ) не помогает.
Итак, я хочу предоставить пользовательскую реализацию внешних методов; может ли это быть достигнуто? И если да, то как?