//------------------------------------------------------------------------------------------------------------------------------------------------- #region IAspectImplementor Members public void ImplementDecoration <TBase>(IHappilClassBody <TBase> classDefinition) { classDefinition.AsBase <TypeTemplate.TPrimary>().AllMethods().Decorate( attributes: null, body: m => { Static.Prop(() => ActionLog).Add(m.Const(m_LogPrefix + "-ON-BEFORE:" + m.MethodInfo.Name)); m.Try(() => { var returnValueExpression = m.Proceed(); if (!object.ReferenceEquals(returnValueExpression, null)) { var returnValue = m.Local <TypeTemplate.TReturn>(initialValue: returnValueExpression); Static.Prop(() => ActionLog).Add(m.Const(m_LogPrefix + "-ON-RETURN-VALUE:" + m.MethodInfo.Name + "=") + returnValue.Func <string>(x => x.ToString)); Static.Prop(() => ActionLog).Add(m.Const(m_LogPrefix + "-ON-SUCCESS:" + m.MethodInfo.Name)); m.Return(returnValue); } else { Static.Prop(() => ActionLog).Add(m.Const(m_LogPrefix + "-ON-RETURN-VOID:" + m.MethodInfo.Name)); Static.Prop(() => ActionLog).Add(m.Const(m_LogPrefix + "-ON-SUCCESS:" + m.MethodInfo.Name)); } }) .Catch <Exception>(e => { Static.Prop(() => ActionLog).Add(m.Const(m_LogPrefix + "-ON-ERROR:" + m.MethodInfo.Name + "=") + e.Prop(x => x.Message)); m.Throw(); }) .Finally(() => { Static.Prop(() => ActionLog).Add(m.Const(m_LogPrefix + "-ON-AFTER:" + m.MethodInfo.Name)); }); } ); }
public void SetUp() { var currentTestName = TestContext.CurrentContext.Test.Name; m_ClassBody = m_Module.DeriveClassFrom <AncestorRepository.BaseOne>("Fluent.StatementTests.TestCase" + currentTestName); m_Class = ((IHappilClassDefinitionInternals)m_ClassBody).HappilClass; }
//----------------------------------------------------------------------------------------------------------------------------------------------------- private void InternalOnMethod <TBase>(IHappilClassBody <TBase> classDefinition, MethodInfo info) { var decoration = new MethodDecorationBuilder(); OnMethod(info, decoration); if (!decoration.IsEmpty) { classDefinition.Method(info).Decorate( attributes: decoration.GetAttributes, body: decoration.ApplyBody); } }
//------------------------------------------------------------------------------------------------------------------------------------------------- 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); }
public void SetUp() { m_ClassBody = m_Module.DeriveClassFrom <AncestorRepository.BaseOne>("_" + Guid.NewGuid().ToString("X")); m_Class = ((IHappilClassDefinitionInternals)m_ClassBody).HappilClass; }
public void ImplementDecoration <TBase>(IHappilClassBody <TBase> classDefinition) { classDefinition.AllMethods().ForEach(info => InternalOnMethod(classDefinition, info)); }