У меня есть несколько классов контроллеров, которые используют свои собственные классы конфигурации, которые устанавливают поведение классов контроллеров.
У меня есть преобразователь контроллера, который выбирает нужный контроллер по его имени.
Теперь я хочу, чтобы другой преобразователь связывал класс контроллера с соответствующим классом конфигурации.
Теперь у меня есть класс конфигурации, вложенный в частичный класс с тем же именем, что и класс контроллера, поэтому преобразователь может однозначно определить класс конфигурации, но я не очень доволен таким чудовищным солотингом, потому что частичный класс, содержащий только вложенную конфигурацию класс должен иметь то же пространство имен, что и класс контроллера, что меня больше всего беспокоит из-за несоответствия его имени папке, в которой этот класс физически расположен, поскольку классы контроллера находятся в папке «Контроллер», а их пространства имен «Something.Controller» и конфигурация классы находятся в папке «Конфигурация», но их пространства имен также должны быть «Something.Controller».
//Path: .\Controller
namespace Something.Controller
{
public partial class MyController : IController
{
}
}
//Path: .\Configuration
namespace Something.Controller
{
public partial class MyController
{
public class MyControllerConfiguration : IConfiguration
{
}
}
}
И распознаватели (без проверки типов, как это было сделано ранее, и единственные типы, которые могут быть переданы этим методам, уже реализуют IController
):
public class Resolver
{
public IController GetController(Type controllerType)
{
return (IController)Activator.CreateInstance(controllerType);
}
public IConfiguration GetControllerConfiguration(Type controllerType)
{
var configurationType = controllerType.GetNestedTypes().FirstOrDefault(t => typeof(IConfiguration).IsAssignableFrom(t));
if (configurationType != null)
return (IConfiguration)Activator.CreateInstance(configurationType);
else
return null;
}
}
Итак, как я могу связать класс контроллера с его классом конфигурации более понятным способом, чем вложение класса конфигурации в соответствующий класс контроллера?
РЕДАКТИРОВАТЬ:
Ниже приведен пример использования:
Представим, что у меня есть два контроллера. У каждого своя конфигурация. Теперь я хочу позволить пользователю выбирать, какой контроллер использовать, а затем отображать пользователю набор свойств из соответствующего класса конфигурации. Конечно, я мог бы создать экземпляр контроллера, который бы раскрывал свою конфигурацию в то время, когда пользователь настраивает конфигурацию приложения, но я не думаю, что это хорошая идея.