コード例 #1
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        #region Overrides of ImplementationConvention

        protected override void OnImplementBaseClass(ImplementationClassWriter <TypeTemplate.TBase> writer)
        {
            writer.PrimaryConstructor("Target", out m_TargetField);
            writer.AllMethods(where : m => m.DeclaringType != typeof(object)).ImplementPropagate(m_TargetField);
            writer.AllProperties().ImplementPropagate(m_TargetField);
            writer.AllEvents().ImplementPropagate(m_TargetField);
        }
コード例 #2
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        private static void ManuallyImplementLoggingDecorator(
            ImplementationClassWriter <AncestorRepository.IFewMethods> implementor,
            Field <List <string> > logField,
            string logSuffix = "")
        {
            var decorator = new ImplementationClassWriter <AncestorRepository.IFewMethods>(implementor.OwnerClass);

            decorator.AllMethods().ForEachMember(method => new TemplateMethodWriter(method, MethodWriterModes.Decorator, w => {
                logField.Add(w.Const(w.OwnerMethod.Name + ":BEFORE" + logSuffix));
                w.Try(() => {
                    var retVal = w.Proceed <TypeTemplate.TReturn>();
                    if (!method.Signature.IsVoid)
                    {
                        logField.Add(w.Const(w.OwnerMethod.Name + ":RETVAL" + logSuffix + "=") + retVal.Func <string>(x => x.ToString));
                        w.Return(retVal);
                    }
                }).Catch <Exception>(e => {
                    logField.Add(w.Const(w.OwnerMethod.Name + ":ERROR" + logSuffix + "=") + e.Prop(x => x.Message));
                    w.Throw();
                }).Finally(() => {
                    logField.Add(w.Const(w.OwnerMethod.Name + ":AFTER" + logSuffix));
                });
            }));
        }
コード例 #3
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------
        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")));
        }
コード例 #4
0
            //-------------------------------------------------------------------------------------------------------------------------------------------------

            protected override void OnImplementPrimaryInterface(ImplementationClassWriter <TypeTemplate.TInterface> writer)
            {
                writer.AllMethods().ImplementEmpty();
            }
コード例 #5
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        protected override void OnImplementAnyInterface(ImplementationClassWriter <TypeTemplate.TInterface> writer)
        {
            writer.AllMethods().ImplementPropagate(m_TargetField.CastTo <TypeTemplate.TInterface>());
            writer.AllProperties().ImplementPropagate(m_TargetField.CastTo <TypeTemplate.TInterface>());
            writer.AllEvents().ImplementPropagate(m_TargetField.CastTo <TypeTemplate.TInterface>());
        }