public DomainObject CreateObjectReference(IObjectInitializationContext objectInitializationContext, ClientTransaction clientTransaction) { ArgumentUtility.CheckNotNull("objectInitializationContext", objectInitializationContext); ArgumentUtility.CheckNotNull("clientTransaction", clientTransaction); var objectID = objectInitializationContext.ObjectID; CheckDomainTypeAndClassDefinition(objectID.ClassDefinition.ClassType); objectID.ClassDefinition.ValidateCurrentMixinConfiguration(); var concreteType = Pipeline.ReflectionService.GetAssembledType(objectID.ClassDefinition.ClassType); var instance = (DomainObject)FormatterServices.GetSafeUninitializedObject(concreteType); Pipeline.ReflectionService.PrepareExternalUninitializedObject(instance, InitializationSemantics.Construction); // These calls are normally performed by DomainObject's ctor instance.Initialize(objectID, objectInitializationContext.RootTransaction); objectInitializationContext.RegisterObject(instance); using (clientTransaction.EnterNonDiscardingScope()) { instance.RaiseReferenceInitializatingEvent(); } return(instance); }