//----------------------------------------------------------------------------------------------------------------------------------------------------- protected override void OnImplementPrimaryInterface(ImplementationClassWriter<TypeTemplate.TInterface> writer) { _threadLogAppenderField = writer.Field<IThreadLogAppender>("_threadLogAppender"); writer.Constructor<IThreadLogAppender>((w, appender) => _threadLogAppenderField.Assign(appender)); writer.AllMethods().Implement(ImplementLogMethod); writer.AllProperties().Implement( p => p.Get(w => w.Throw<NotSupportedException>("Events are not supported")), p => p.Set((w, value) => w.Throw<NotSupportedException>("Events are not supported"))); writer.AllEvents().Implement( e => e.Add((w, args) => w.Throw<NotSupportedException>("Events are not supported")), e => e.Remove((w, args) => w.Throw<NotSupportedException>("Events are not supported"))); }
//----------------------------------------------------------------------------------------------------------------------------------------------------- private void WriteEntityProperty( ImplementationClassWriter<TypeTemplate.TBase> writer, IEdmModel model, IEdmProperty property, List<Action<ConstructorWriter>> initializers) { var propertyClrType = TranslateEdmTypeToClrType(model, property.Type.Definition); using (TT.CreateScope<TT.TProperty>(propertyClrType)) { var backingField = writer.Field<TT.TProperty>("_" + property.Name); if (property.Type.IsCollection()) { Type elementClrType = propertyClrType.GetGenericArguments()[0]; initializers.Add(cw => { using (TT.CreateScope<TT.TProperty, TT.TItem>(propertyClrType, elementClrType)) { backingField.Assign(cw.New<TT.TProperty>(cw.Const<IEnumerable<TT.TItem>>(null), cw.Const(TrackingMode.None))); } }); } writer.NewVirtualWritableProperty<TT.TProperty>(property.Name).ImplementAutomatic(backingField); } }