Пример #1
0
        /// <summary>
        /// Builds the adapter.
        /// </summary>
        /// <returns></returns>
        public Type Build()
        {
            //Setup emitter
            ClassEmitter classEmitter = new ClassEmitter(ModuleScope,
                                                         OriginalObject.Name + "Adapter",
                                                         typeof(AdapterBase),
                                                         new Type[] { }, TypeAttributes.Class,
                                                         true);

            //Add a field to hold a reference to the original object that is being adapter.
            FieldReference adaptedObjectReference = classEmitter.CreateField("_Original", OriginalObject);

            //Add a constructor that accepts a reference to the original object and
            //assigns that reference to the field.
            ArgumentReference  parameter   = new ArgumentReference(OriginalObject);
            ConstructorEmitter constructor = classEmitter.CreateConstructor(parameter);

            constructor.CodeBuilder.AddStatement(
                new AssignStatement(adaptedObjectReference, new ReferenceExpression(parameter)));
            constructor.CodeBuilder.AddStatement(new ReturnStatement());

            //For each method, walk the pipeline
            foreach (MethodInfo method in OriginalObject.GetMethods())
            {
                AdapterBuilderStageContext context =
                    new AdapterBuilderStageContext(OriginalObject, classEmitter, adaptedObjectReference, method);
                WalkPipeline(context);
            }

            //build the type
            return(classEmitter.BuildType());
        }
		private void WalkPipeline(AdapterBuilderStageContext context)
		{
			foreach (IDynamicAdapterBuilderStage stage in stagePipeline)
			{
				stage.DoWork(context);
			}
		}
Пример #3
0
 private void WalkPipeline(AdapterBuilderStageContext context)
 {
     foreach (IDynamicAdapterBuilderStage stage in stagePipeline)
     {
         stage.DoWork(context);
     }
 }
		/// <summary>
		/// Builds the adapter.
		/// </summary>
		/// <returns></returns>
		public Type Build()
		{

			//Setup emitter 
			ClassEmitter classEmitter = new ClassEmitter(ModuleScope,
				OriginalObject.Name + "Adapter",
				typeof(AdapterBase),
				new Type[] { }, TypeAttributes.Class,
				true);

			//Add a field to hold a reference to the original object that is being adapter.
			FieldReference adaptedObjectReference = classEmitter.CreateField("_Original", OriginalObject);

			//Add a constructor that accepts a reference to the original object and
			//assigns that reference to the field.
			ArgumentReference parameter = new ArgumentReference(OriginalObject);
			ConstructorEmitter constructor = classEmitter.CreateConstructor(parameter);
			constructor.CodeBuilder.AddStatement(
				new AssignStatement(adaptedObjectReference, new ReferenceExpression(parameter)));
			constructor.CodeBuilder.AddStatement(new ReturnStatement());

			//For each method, walk the pipeline
			foreach (MethodInfo method in OriginalObject.GetMethods())
			{
				AdapterBuilderStageContext context =
					new AdapterBuilderStageContext(OriginalObject, classEmitter, adaptedObjectReference, method);
				WalkPipeline(context);
			}

			//build the type			
			return classEmitter.BuildType();

		}