C# 如何避免反思?
我用C# 如何避免反思?,c#,oop,c#-4.0,design-patterns,C#,Oop,C# 4.0,Design Patterns,我用MyClassA和MyClassB实现了抽象类BaseClass。用户可以扩展或使用这两个子类,例如,他只创建UserExtensionClassA,并按原样使用MyClassB。有一个类ClassC负责初始化这些类。它接收配置(例如,包含所需实现类的完整类名),并决定何时以及是否初始化这些类(例如,已有3个BaseClassimplementations=>拒绝创建请求的现有实例) 问题:如何避免示例中的反射ClassC可以从配置中的名称创建类。但我仍然可以更改库实现中的几乎所有内容,我不
MyClassA
和MyClassB
实现了抽象类BaseClass
。用户可以扩展或使用这两个子类,例如,他只创建UserExtensionClassA
,并按原样使用MyClassB
。有一个类ClassC
负责初始化这些类。它接收配置(例如,包含所需实现类的完整类名),并决定何时以及是否初始化这些类(例如,已有3个BaseClass
implementations=>拒绝创建请求的现有实例)
问题:如何避免示例中的反射
ClassC
可以从配置中的名称创建类。但我仍然可以更改库实现中的几乎所有内容,我不喜欢反射的东西。我建议不要运行自己的,而是依赖现有的IoC(控制反转)容器,如Autofac,因为这给了您高度的灵活性,同时也方便了依赖项注入(DI)等设计概念和控制反转(IoC)
大多数IoC容器提供编程接口以及基于JSON/XML文件的配置支持,包括:
Autofac配置文件示例:
{
"defaultAssembly": "Autofac.Example.Calculator",
"components": [
{
"type": "Autofac.Example.Calculator.Addition.Add, Autofac.Example.Calculator.Addition",
"services": [
{
"type": "Autofac.Example.Calculator.Api.IOperation"
}
],
"injectProperties": true
},
{
"type": "Autofac.Example.Calculator.Division.Divide, Autofac.Example.Calculator.Division",
"services": [
{
"type": "Autofac.Example.Calculator.Api.IOperation"
}
],
"parameters": {
"places": 4
}
}
]
}
构建容器:
// Add the configuration to the ConfigurationBuilder.
var config = new ConfigurationBuilder();
config.AddJsonFile("autofac.json");
// Register the ConfigurationModule with Autofac.
var module = new ConfigurationModule(config.Build());
var builder = new ContainerBuilder();
builder.RegisterModule(module);
这是混乱的,请张贴一些代码来澄清情况。此外,反思似乎不是一个坏的解决方案…请张贴你已经尝试了什么?帮助很多。为什么不写代码而不是写“我有一个抽象类基类和MyClassA和MyClassB实现”?不清楚为什么以及如何使用反射(配置是字典?),您能展示一下吗?以及想要的伪代码。但一般来说,像“我不喜欢反思的东西”这样的理由是不合理的。您是读取配置一次还是1234567次?您是否遇到性能/内存问题?