private void AddPropertyFieldInitialization(FieldDefinition backingField,
            TypeSpec propertyType,
            List<Action<ILProcessor>> ctorIlActions)
        {
            if (propertyType.Maybe().OfType<TransformedType>().Select(x => x.MappedAsValueObject).OrDefault())
            {
                var typeInfo = this.clientTypeInfoDict[propertyType];

                ctorIlActions.Add(il =>
                {
                    il.Emit(OpCodes.Ldarg_0);
                    il.Emit(OpCodes.Newobj, typeInfo.EmptyPocoCtor);
                    il.Emit(OpCodes.Stfld, backingField);
                });
            }
            else if (propertyType.IsCollection)
            {
                var genericInstanceFieldType = (GenericInstanceType)backingField.FieldType;
                var listReference = Import(typeof(List<>));
                var listCtor = listReference.Resolve().GetConstructors().First(x => x.Parameters.Count == 0);
                var listCtorInstance =
                    Import(listCtor).MakeHostInstanceGeneric(genericInstanceFieldType.GenericArguments[0]);
                ctorIlActions.Add(il =>
                {
                    il.Emit(OpCodes.Ldarg_0);
                    il.Emit(OpCodes.Newobj, listCtorInstance);
                    il.Emit(OpCodes.Stfld, backingField);
                });
            }
            else if (propertyType.IsDictionary)
            {
                var genericInstanceFieldType = (GenericInstanceType)backingField.FieldType;
                var dictReference = Import(typeof(Dictionary<,>));
                var dictCtor = dictReference.Resolve().GetConstructors().First(x => x.Parameters.Count == 0);
                var dictCtorInstance =
                    Import(dictCtor).MakeHostInstanceGeneric(genericInstanceFieldType.GenericArguments.ToArray());
                ctorIlActions.Add(il =>
                {
                    il.Emit(OpCodes.Ldarg_0);
                    il.Emit(OpCodes.Newobj, dictCtorInstance);
                    il.Emit(OpCodes.Stfld, backingField);
                });
            }
        }