コード例 #1
0
        public void Test()
        {
            const string Source = @"
//Use types from different namespaces and assemblies.
public class GenClass1
{
    public int Num { get; set; }=100;
    
    public Stream SomeProp1 { get; set; }

    public List<string> SomeProp2 { get; set; }

    public Task<Dictionary<string, MemberInfo>> SomeMethod1(){ return null; }
}
";
            //Easy manage depemdensies.
            var ctx = new SourceFileContext();

            ctx.UsedType(typeof(int));
            ctx.UsedType(typeof(Stream));
            ctx.UsedType(typeof(List <string>));

            //Works with generic parameters automatically.
            ctx.UsedType(typeof(Task <Dictionary <string, MemberInfo> >));

            //Add namespace and usings.
            var source = CodeGenExtensions.WrapClass(
                Source,
                "MyNamespace",
                ctx.GetNamespaces()
                );
            var compilerInputData = new CompilerInputData()
            {
                CSharpCode           = source,
                ReferencedAssemblies = ctx.GetAssemblies()
            };
            var     assembly      = Compiler.Compile(compilerInputData);
            var     type          = assembly.GetType("MyNamespace.GenClass1");
            dynamic modelInstance = Activator.CreateInstance(type);
            int     num           = modelInstance.Num;

            Assert.AreEqual(100, num);
        }