/// <summary> /// Construtor padrão. /// </summary> /// <param name="linkEntity"></param> /// <param name="entityCreator"></param> /// <param name="uiContext"></param> /// <param name="entityTypeManager"></param> /// <param name="sourceContext"></param> public EntityFromLinkCreatorArgs(IEntity linkEntity, EntityFromModelCreatorHandler entityCreator, string uiContext, IEntityTypeManager entityTypeManager, Colosoft.Query.ISourceContext sourceContext) { this.LinkEntity = linkEntity; this.EntityCreator = entityCreator; this.UIContext = uiContext; this.EntityTypeManager = entityTypeManager; this.SourceContext = sourceContext; }
/// <summary> /// Libera a instancia. /// </summary> /// <param name="disposing"></param> protected override void Dispose(bool disposing) { base.Dispose(disposing); _linkInfo = null; _child = null; _childFromModelCreator = null; _ignoreChildItems.Clear(); }
/// <summary> /// Inicializa a instancia. /// </summary> /// <param name="child">Instancia do filho associado.</param> /// <param name="linkInfo">Informações do link.</param> /// <param name="childFromModelCreator"></param> /// <param name="sourceContext">Contexto de origem de consultas.</param> private void Initialize(IEntityList child, EntityLoaderLinkInfo linkInfo, EntityFromModelCreatorHandler childFromModelCreator, Colosoft.Query.ISourceContext sourceContext) { child.Require("child").NotNull(); linkInfo.Require("linkInfo").NotNull(); _child = child; _linkInfo = linkInfo; _childFromModelCreator = childFromModelCreator; ((IConnectedEntity)this).Connect(sourceContext); if (_hasUid == null) { _hasUid = TypeManager.HasUid(typeof(TEntity)); } if (child is Collections.INotifyCollectionChangedDispatcher) { ((Collections.INotifyCollectionChangedDispatcher)child).AddCollectionChanged(ChildCollectionChanged, Collections.NotifyCollectionChangedDispatcherPriority.High); } else { child.CollectionChanged += ChildCollectionChanged; } }
/// <summary> /// Cria uma instancia já definindos os itens iniciais. /// </summary> /// <param name="items">Itens que serão usados na inicialização.</param> /// <param name="linkInfo">Informações do link.</param> /// <param name="childFromModelCreator"></param> /// <param name="child">Instancia do filho associado com o link.</param> /// <param name="uiContext"></param> /// <param name="parentUidSetter"></param> /// <param name="sourceContext">Contexto de origem de consultas.</param> /// <param name="entityTypeManager"></param> public EntityLinksList(IEnumerable <TEntity> items, EntityLoaderLinkInfo linkInfo, EntityFromModelCreatorHandler childFromModelCreator, IEntityList child, string uiContext, Action <TEntity> parentUidSetter, Colosoft.Query.ISourceContext sourceContext = null, IEntityTypeManager entityTypeManager = null) : base(items, uiContext, parentUidSetter, entityTypeManager) { Initialize(child, linkInfo, childFromModelCreator, sourceContext); }
/// <summary> /// Cria um nova instancia da lista. /// Esse método é usado por reflexão. /// </summary> /// <param name="items"></param> /// <param name="child">Instancia do filho associado com o link.</param> /// <param name="linkInfo"></param> /// <param name="childFromModelCreator"></param> /// <param name="uiContext"></param> /// <param name="parentUidSetter"></param> /// <param name="sourceContext"></param> /// <param name="entityTypeManager"></param> /// <returns></returns> internal static EntityLinksList <TEntity> CreateLazyInstance(Lazy <IEnumerable <IEntity> > items, EntityLoaderLinkInfo linkInfo, EntityFromModelCreatorHandler childFromModelCreator, IEntityList child, string uiContext, Action <IEntity> parentUidSetter, Colosoft.Query.ISourceContext sourceContext, IEntityTypeManager entityTypeManager) { return(new EntityLinksList <TEntity>(new Lazy <IEnumerable <TEntity> >(() => new Collections.NotifyCollectionChangedObserverRegisterEnumerable <TEntity>(items.Value)), linkInfo, childFromModelCreator, child, uiContext, new Action <TEntity>(e => parentUidSetter(e)), sourceContext, entityTypeManager) { _isLazy = true }); }