Расширения с вложенными именами
Я использую стороннюю библиотеку, которая имеет объект подключения под названием SessionManager. SessionManager позволяет создавать различные типы запросов для запроса, добавления или моддинга. Я пишу некоторые методы расширения, чтобы попытаться сделать кодирование быстрее, так как я склонен повторять код для многих проектов при использовании этого компонента. Вот обычный код, который я бы использовал для запроса списка cusotmers:
SessionManager manager = new SessionManager(); manager.OpenConnection(filename); IMsgSetRequest MsgRequest = SessionManager.CreateMsgSetRequest(); ICustomerQuery query = MsgRequest.AppendCustomerQuery(); query.ActiveStatus.SetValue(ENActiveStatus.All); IResponse response = SessionManager.DoRequests(MsgRequest); if(response.StatusCode == 0) { return (ICustomerRetList)response.Detail; } else { throw new Exception("Unknown error querying customers: " + response.StatusMessage; }
Я не знаю, возможно ли это с помощью расширений, но я хотел бы иметь возможность изменить свой код, чтобы сделать что-то вроде этого:
SessionManager manager = new SessionManager(); return manager.Customers.QueryAll();Идея заключается в том, что я мог бы затем кодировать некоторые стандартные запросы, такие как
manager.Customers.QueryActive();и
manager.Vendors.QueryAll();Самая трудная часть, которую я не могу понять, - это часть между SessionManager и фактической функцией расширения для запроса. Не похоже, что вы можете сделать вложенный класс с расширениями.
Что я уже пробовал:
Я попытался создать статический класс внутри статического класса, но получил ошибку, что методы расширения должны быть в классе верхнего уровня. Я попробовал следующий код, но компилятор, похоже, не понял, что я пытаюсь сделать:
public static ICustomerRetList Customer.QueryAll(this SessionManager manager)