Чтобы ответить на ваш прямой вопрос, я думаю, что преодоление дополнительных трудностей, связанных с выделением вашей функциональности из базовой функциональности, является неприятным запахом кода. Не беспокойтесь о том, чтобы ваш код был отделен от кода с точки зрения использования. Во-первых, это значительно усложняет поиск того, что вы ищете, поскольку теперь есть два места для поиска одинаковых функций, и, во-вторых, синтаксис делает вид, что ваши расширения работают со свойством MTPAEC, а не с основным объектом ( есть).
Мое предложение состоит в том, чтобы использовать реальные методы Extension, которые позволяют вам иметь это, но без дополнительного конструктора.
public static class ApiExtension
{
public static string SomeMethod(this ThirdPartyApiClass value)
{
string foo = value.SomeCrappyMethodTheProviderGaveUs();
//do some stuff that the third party api can't do that we need
return foo;
}
}
используется
var mine = new ThirdPartyApiClass();
mine.SomeMethod();
C # сделает все остальное.
Глядя на ваше предложение выше, я думаю, вам придется разделить два класса. Один для предоставления групп расширений с использованием механизма расширений, а другой для предоставления каждой группы логики.
Если вам нужно отделить свой взгляд от взгляда, используйте соглашение об именах, чтобы сделать ваш образ уникальным. Хотя после зависания и через intellisense он скажет вам, что это метод расширения.
Если вы просто хотите разделить контент, как у вас, вам понадобятся два класса.
public static class ApiExtensionder
{
public static MTPAEC(this ThirdPartyApiClass value)
{
return new MtpaecExtensionWrapper(value);
}
}
public class MtpaecExtensionWrapper
{
private ThirdPartyApiClass wrapped;
public MtpaecExtensionWrapper(ThirdPartyApiClass wrapped)
{
this.wrapped = wrapped;
}
public string SomeMethod()
{
string foo = this.wrapped.SomeCrappyMethodTheProviderGaveUs();
//do some stuff that the third party api can't do that we need
return foo;
}
}