public class MyController
{
public object CreateByEnum(DataModelType modeltype)
{
string enumText = modeltype.ToString(); // will return for example "Company"
Type classType = Type.GetType(enumText); // the Type for Company class
object t = Activator.CreateInstance(classType); // create an instance of Company class
return t;
}
}
public class CompanyView
{
public static List<Personel> GetPersonel()
{
MyController controller = new MyController();
_Company company = controller.CreateByEnum(DataModelType.Company) as _Company;
return company.GetPersonel();
}
}
public enum DataModelType
{
xyz,
klm,
tucyz,
Company
}
是的,我同意Activator.CreateInstance()非常有用。不幸的是,我需要传递正确的类型。这意味着构建正确的字符串以传递给Type.GetType()。如果我在上面发布的代码中跟踪对Controller.CreatebyEnum()的调用,那么仅仅执行modelType.ToString()是不够的,即使对于DataModelType.Company也是如此。 我的解决方案是维护瓶颈。 什么会更好的是取得modelType.ToString()的结果,然后递归搜索在当前AppDomain中加载的所有程序集中找到的所有类型。根据MSDN,Type.GetType()只搜索当前的调用程序集和mscorlib.dll。我怎样才能做到这一点? 。我需要最佳表现?
答案 0 :(得分:0)
我使用Activator.CreateInstance作为我框架的核心部分,主要用于实现我的数据访问提供程序(由接口定义)的实现。
因为我知道我想要哪一个,所以我只需传入一个AppSetting键 - 这样你就可以通过配置改变你使用的那个。
我同意凯恩 - 我不能100%确定你的问题是什么。
如果你传入一个枚举,那不是建议你知道你想要创建什么类型(即使只是在一般意义上,而不是一个明确的类型)?
在某些时候,某些事情必须要决定实施什么 - 你知道这是谁/是什么?可能的选择:
可能只是因为你对枚举本身的要求过高?您仍然可以使用枚举来控制执行,但是您需要分离实例的创建方式。
这是否足够清楚,还是人们想要/需要代码示例?