Question: Is it possible to instantiate a template class at runtime for example:

```
Type type = Type.GetType("iTry.Workflow.Person");
WorkflowPropertyViewModel<type> propViewModel = new WorkflowPropertyViewModel<type>();

```

This obviously does not work. Is there some other way to do it?

The Generic class looks like the following:

```
public class WorkflowPropertyViewModel<T> : IProperty<T>  
{
    public Task<T> ValueAsync
    {
        get;
        set;
    }

    public T Value
    {
        get;
        set;
    }

    public IQueryable<T> PossibleItems
    {
        get;
        set;
    }
}

```

Answer: 
Yes, you can instantiate a generic class with a type known only at runtime, e.g.:

```
public class A { }
public class U<T> {
    public T X { get; set; }
}

static void Main(string[] args) {
    Type a = typeof(A);
    Type u = typeof(U<>);
    dynamic uOfA = Activator.CreateInstance(u.MakeGenericType(a));
    uOfA.X = new A();
    Console.WriteLine(uOfA.GetType());
    Console.WriteLine(uOfA.X.GetType());
}

```

However, this snippet uses reflection and dynamic typing, both of which may cause a lot of maintenance problems, so you would be better off using them very carefully or finding a simpler solution.
Try this:

```
object o = Activator.CreateInstance(typeof(WorkflowPropertyViewModel<>).MakeGenericType(new Type[] {type}));

```

Note that in code you cannot easily reference that type, unless it implements another non-generic interface - so you have to use object instead or make use of more reflection.