Ejemplo n.º 1
0
            //-------------------------------------------------------------------------------------------------------------------------------------------------

            #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));
                    });
                }
                    );
            }