public static void DummyMethod() { StructureServiceProvider ssp = null; Type myCompositeType = null; #region CompositeCreationCode1 // Acquiring CompositeBuilderInfo CompositeBuilderInfo <MyComposite> cbi = ssp.NewPlainCompositeBuilder <MyComposite>(); // Acquiring CompositeBuilder, type of composite not known at compile time CompositeBuilder cb = ssp.NewPlainCompositeBuilder(myCompositeType); // myCompositeType is of System.Type // Acquiring CompositeBuilder and using multiple types to filter out possible composites CompositeBuilder cbm = ssp.NewPlainCompositeBuilder(new[] { typeof(MyCompositePartialType1), typeof(MyCompositePartialType2) }); #endregion { #region CompositeCreationCode2 MyComposite composite = cbi.Instantiate(); #endregion } { #region CompositeCreationCode3 MyComposite composite = cb.Instantiate <MyComposite>(); MyComposite composite2 = (MyComposite)cb.InstantiateWithType(typeof(MyComposite)); // Both composite and composite2 will be same object. #endregion } { #region CompositeCreationCode4 MyCompositePartialType1 composite1 = cbm.Instantiate <MyCompositePartialType1>(); MyCompositePartialType2 composite2 = cbm.Instantiate <MyCompositePartialType2>(); // composite1 and composite2 may be different objects. #endregion } }
/// <summary> /// Helper method to easily invoke <see cref="CompositeBuilder.InstantiateWithType(Type)"/> method when type is known at compile-time. /// </summary> /// <typeparam name="TComposite">The type of the composite.</typeparam> /// <param name="builder">The <see cref="CompositeBuilder"/>.</param> /// <returns>The return value of <see cref="CompositeBuilder.InstantiateWithType(Type)"/> casted to <typeparamref name="TComposite"/>.</returns> public static TComposite Instantiate <TComposite>(this CompositeBuilder builder) { return((TComposite)builder.InstantiateWithType(typeof(TComposite))); }