示例#1
0
        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);
        }