使用CreateInstance创建泛型类对象

时间:2013-04-15 07:16:05

标签: generics activator createinstance

我有以下代码示例

public interface ITest
{
    string abc { get; set; }
}

public class GenericController<T> :  Controller  where T : class, ITest, new()
{
    public string abc { get; set; }

    public ActionResult Index()
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";

        return View();
    }
}

现在尝试使用以下代码创建对象会给我错误 -

Type typeObject = typeof(Employee);
Type object1 = typeof(GenericController<>).MakeGenericType(typeObject);
controller = (IController)Activator.CreateInstance(object1);

给出的错误是

  

GenericArguments [0],'MvcApplication2.Controllers.Employee','MvcApplication2.Controllers.GenericController`1 [T]'违反了类型'T'的约束。

从GenericController类中删除ITest接口可以正常工作。我需要该接口,所以键入将控制器对象转换为接口我可以设置新创建的对象的几个属性。

如何解决此问题。

-Rajesh

1 个答案:

答案 0 :(得分:0)

您确定Employee实施ITest ?? 如果它在GenericController上没有ITest并且它显示violates constraint,那么,结论是你传递的是一个没有实现ITest的Type。