【发布时间】:2017-05-10 14:53:17
【问题描述】:
我有几个控制器类,它们使用自己的配置类来设置控制器类的行为。
我有控制器解析器,它可以通过名称获取所需的控制器。
现在我想要另一个解析器将控制器类与其各自的配置类绑定。
我现在拥有的是嵌套在与控制器类同名的部分类中的配置类,因此解析器可以明确地确定配置类,但我对这种可怕的独奏不太满意,因为部分类只包含嵌套配置类必须与控制器类具有相同的命名空间,这让我最困扰,因为它的名称与该类物理所在的文件夹不一致,因为控制器类位于“Controller”文件夹中,它们的命名空间是“Something.Controller " 并且配置类在文件夹 "Configuration" 中,但它们的命名空间也必须是 "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;
}
}
那么,与在各自的控制器类中嵌套配置类相比,如何以更清晰的方式将控制器类与其配置类耦合?
编辑:
下面是一些用法示例:
假设我有两个控制器。每个都有自己的配置。现在我想让用户选择使用哪个控制器,然后从相应的配置类中向用户显示一组属性。当然,我可以创建控制器实例,它会在用户设置应用程序配置时公开其配置,但我认为这不是一个好主意。
【问题讨论】:
-
配置类如何控制控制器类的行为?
-
@Orangesandlemons 设置文件控制器正在处理的位置、并发线程数等。
标签: c# class inner-classes partial-classes