У нас есть поставщик, который предоставляет библиотеку для доступа к своему оборудованию. К сожалению, если у вас несколько устройств, вам нужно импортировать свою библиотеку несколько раз с разными именами DLL. Как следствие, у нас есть метрическая тонна дублированного кода, и я беспокоюсь, что скоро это станет кошмаром для обслуживания.
То, что у нас есть на данный момент, похоже на:
namespace MyNamespace {
public static class Device01 {
public const string DLL_NAME = @"Device01.dll";
[DllImport(DLL_NAME, EntryPoint = "_function1")]
public static extern int Function1(byte[] param);
...
[DllImport(DLL_NAME, EntryPoint = "_function99")]
public static extern int Function99(int param);
}
....
public static class Device16 {
public const string DLL_NAME = @"Device16.dll";
[DllImport(DLL_NAME, EntryPoint = "_function1")]
public static extern int Function1(byte[] param);
...
[DllImport(DLL_NAME, EntryPoint = "_function99")]
public static extern int Function99(int param);
}
}
Если бы я использовал C или С++, я бы просто определил функции один файл и #include их несколько раз в статических классах, но не очень, но лучше, чем альтернатива, но в С# у меня нет этой опции.
Если у кого-нибудь есть умные идеи о том, как эффективно определить factory, который позволит нам генерировать столько статических классов устройств, сколько нам нужно, мне было бы очень интересно.
Спасибо,
Изменить: прототипы функций довольно разнообразны, поэтому любой метод, который полагается на них одинаковым, не подходит. Благодарим за предложения до сих пор, я не так быстро выдумывал так много идей.