我希望你能帮我一臂之力.这已经困扰了我很久了.我在网上找不到确凿的答案.我有一个简单的类层次结构:BaseClass,ClassA,ClassB和DefaultClass派生自它.它们都有类似ClassA(输入输入)的构造函数:base(输入)......都非常简单.现在我有以下工厂
namespace mynamespace
{
public class Factory
{
public static Dictionary<string, Type> Map =
new Dictionary<string, Type>
{
{"ClassA", typeof(ClassA)},
{"ClassB", typeof(ClassB)}
};
public static BaseClass Create(Input input)
{
Type constructor;
try
{
constructor = Map[input.ClassType];
}
catch (KeyNotFoundException)
{
constructor = typeof(DefaultClass);
}
return (BaseClass) Activator.CreateInstance(constructor, input);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,输入对象的.ClassType成员确定实例化了哪个类.这种类型的构造一直在为一个简单的调用工作
var myClass = Factory.Create(input);
Run Code Online (Sandbox Code Playgroud)
在我的独立应用程序中.现在我必须让应用程序在服务器上运行,并且对Create方法的调用从客户端接收序列化的输入对象.我会说这是有效的应用程序和没有的应用程序之间的唯一区别.现在,输入就是这样的
[DataContract]
public class Input
{
[DataMember] public string ClassType;
[DataMember] public string member1;
}
Run Code Online (Sandbox Code Playgroud)
在它没有这样的DataContract或DataMember注释之前.好了,现在代码在Activator.CreateInstance行崩溃了,但是"给定的密钥不存在于字典中".你有什么想法可以解决这个问题吗?唯一的区别是构造函数中的序列化对象.
非常感谢提前和问候.
| 归档时间: |
|
| 查看次数: |
8965 次 |
| 最近记录: |