예제 #1
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public T New <T>() where T : class
        {
            var key  = new HappilTypeKey(primaryInterface: typeof(T));
            var type = base.GetOrBuildType(key);

            return(type.CreateInstance <T>());
        }
예제 #2
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        private TypeEntry BuildNewTypeEntry(HappilTypeKey key)
        {
            using (key.CreateTypeTemplateScope())
            {
                var classDefinition = DefineNewClass(m_Module, key);
                return(new TypeEntry((IHappilClassDefinitionInternals)classDefinition));
            }
        }
예제 #3
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public IHappilClassBody <object> DefineClass(HappilTypeKey key, string namespaceName)
        {
            return(DefineClass(namespaceName + ".ImplOf" + key.PrimaryInterface.Name, key.BaseType));
        }
예제 #4
0
            //-------------------------------------------------------------------------------------------------------------------------------------------------

            public TupleClassBuilder(HappilTypeKey key, IHappilClassBody <object> classBody)
            {
                m_Key             = key;
                m_ClassBody       = classBody;
                m_TupleProperties = TypeMembers.Of(key.PrimaryInterface).ImplementableProperties.ToDictionary(p => p.Name, StringComparer.OrdinalIgnoreCase);
            }
예제 #5
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        protected override IHappilClassDefinition DefineNewClass(HappilModule module, HappilTypeKey key)
        {
            var classDefinition = Module.DeriveClassFrom <object>(MakeClassNameFrom(key.PrimaryInterface, prefix: "XTupleOf"));
            var builder         = new TupleClassBuilder(key, classDefinition);

            builder.BuildClass();

            return(classDefinition);
        }
예제 #6
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        protected abstract IHappilClassDefinition DefineNewClass(HappilModule module, HappilTypeKey key);
예제 #7
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        protected TypeEntry GetOrBuildType(HappilTypeKey key)
        {
            return(m_BuiltTypes.GetOrAdd(key, valueFactory: BuildNewTypeEntry));
        }