예제 #1
0
        public PolymorphicSubLinkedSourcesTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <WithPolymorphicSubLinkedSource>()
            .LoadLinkPolymorphicList(
                linkedSource => linkedSource.Model.Subs,
                linkedSource => linkedSource.Subs,
                link => link.GetType(),
                includes => includes.Include <SubContentWithImageLinkedSource>().AsNestedLinkedSourceFromModel(
                    typeof(SubContentWithImage),
                    link => (SubContentWithImage)link,
                    (linkedSource, referenceIndex, childLinkedSource) =>
                    childLinkedSource.Contextualization = linkedSource.Model.Contextualizations[referenceIndex]
                    )
                .Include <SubContentWithoutReferencesLinkedSource>().AsNestedLinkedSourceFromModel(
                    typeof(SubContentWithoutReferences),
                    link => (SubContentWithoutReferences)link,
                    (linkedSource, referenceIndex, childLinkedSource) =>
                    childLinkedSource.Contextualization = linkedSource.Model.Contextualizations[referenceIndex]
                    )
                );

            loadLinkProtocolBuilder.For <SubContentWithImageLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.ImageId,
                linkedSource => linkedSource.Image);

            _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
예제 #2
0
        public PolymorphicMixtedTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <LinkedSource>()
            .LoadLinkPolymorphic(
                linkedSource => linkedSource.Model.TargetReference,
                linkedSource => linkedSource.Target,
                link => link.GetType(),
                includes => includes.Include <Person>().AsReferenceById(
                    typeof(int),
                    link => link.ToString()
                    )
                .Include <PersonLinkedSource>().AsNestedLinkedSourceById(
                    typeof(string),
                    link => link.ToString()
                    )
                .Include <PersonLinkedSource>().AsNestedLinkedSourceFromModel(
                    typeof(Person),
                    link => (Person)link
                    )
                );
            loadLinkProtocolBuilder.For <PersonLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.SummaryImageId,
                linkedSource => linkedSource.SummaryImage);

            _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
예제 #3
0
        public GenericPieTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <StringPieLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.PieContent,
                linkedSource => linkedSource.SummaryImage);

            loadLinkProtocolBuilder.For <IntPieLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.PieContent,
                linkedSource => linkedSource.SummaryImage);

            _sut = loadLinkProtocolBuilder.Build(() =>
                                                 new ReferenceLoaderStub(
                                                     new ReferenceTypeConfig <Pie <string>, string>(
                                                         ids => new PieRepository <string>().GetByPieContentIds(ids),
                                                         reference => reference.Id
                                                         ),
                                                     new ReferenceTypeConfig <Pie <int>, string>(
                                                         ids => new PieRepository <int>().GetByPieContentIds(ids),
                                                         reference => reference.Id
                                                         )
                                                     )
                                                 );
        }
예제 #4
0
        public PolymorphicSubLinkedSourceTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <LinkedSource>()
            .LoadLinkPolymorphic(
                linkedSource => linkedSource.Model.Target,
                linkedSource => linkedSource.Target,
                link => link.Type,
                includes => includes.Include <PdfReferenceLinkedSource>().AsNestedLinkedSourceFromModel(
                    "pdf",
                    link => link,
                    (linkedSource, referenceIndex, childLinkedSource) =>
                    childLinkedSource.Contextualization = "From the level below:" + linkedSource.Model.Id
                    )
                .Include <WebPageReferenceLinkedSource>().AsNestedLinkedSourceFromModel(
                    "web-page",
                    link => link.GetAsBlogPostReference()
                    )
                );

            loadLinkProtocolBuilder.For <WebPageReferenceLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.ImageId,
                linkedSource => linkedSource.Image);

            _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
예제 #5
0
        public void CreateLoadLinkConfig_WithCycleCausedByIndirectLinkedSources_ShouldThrow()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <IndirectCycleLinkedSourceA>()
            .LoadLinkNestedLinkedSourceById(
                linkedSource => linkedSource.Model.ModelBId,
                linkedSource => linkedSource.ModelB
                );
            loadLinkProtocolBuilder.For <IndirectCycleLinkedSourceB>()
            .LoadLinkNestedLinkedSourceById(
                linkedSource => linkedSource.Model.ModelCId,
                linkedSource => linkedSource.ModelC
                );
            loadLinkProtocolBuilder.For <IndirectCycleLinkedSourceC>()
            .LoadLinkNestedLinkedSourceById(
                linkedSource => linkedSource.Model.ModelAId,
                linkedSource => linkedSource.ModelA
                );

            Action act = () => loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());

            var exception = Assert.Throws <InvalidOperationException>(act);

            exception.Message.Should().BeOneOf(
                $"Recursive dependency detected for type {{ {nameof(IndirectCycleLinkedSourceA)} }}.",
                $"Recursive dependency detected for type {{ {nameof(IndirectCycleLinkedSourceB)} }}.",
                $"Recursive dependency detected for type {{ {nameof(IndirectCycleLinkedSourceC)} }}.");
        }
예제 #6
0
        public PolymorphicTest()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <LinkedSource>()
            .LoadLinkPolymorphic(
                linkedSource => linkedSource.Model.PolyRef,
                linkedSource => linkedSource.Poly,
                link => link.Kind,
                includes => includes.Include <PersonLinkedSource>().AsNestedLinkedSourceById(
                    "person-nested",
                    link => (string)link.Value)
                .Include <PersonLinkedSource>().AsNestedLinkedSourceFromModel(
                    "person-sub",
                    link => (Person)link.Value)
                .Include <Image>().AsReferenceById(
                    "img",
                    link => (string)link.Value)
                );
            loadLinkProtocolBuilder.For <PersonLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.SummaryImageId,
                linkedSource => linkedSource.SummaryImage);
            _sut = (LoadLinkProtocol)loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
예제 #7
0
        public DebugModeTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <BlogPostLinkedSource>()
            .LoadLinkNestedLinkedSourceById(
                linkedSource => linkedSource.Model.AuthorId,
                linkedSource => linkedSource.Author)
            .LoadLinkNestedLinkedSourceById(
                linkedSource => linkedSource.Model.MediaId,
                linkedSource => linkedSource.Media);
            loadLinkProtocolBuilder.For <PersonLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.SummaryImageId,
                linkedSource => linkedSource.SummaryImage);
            loadLinkProtocolBuilder.For <MediaLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.SummaryImageId,
                linkedSource => linkedSource.SummaryImage);

            var blogPostConfig = new ReferenceTypeConfig <BlogPost, string>(
                ids => ids.Select(GetBlogPost),
                reference => reference.Id
                );

            _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub(blogPostConfig));
        }
        public SideEffectBetweenNestedLinkedSourceTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <LinkedSource>()
            .LoadLinkNestedLinkedSourceById(
                linkedSource => linkedSource.Model.PersonId,
                linkedSource => linkedSource.Person
                )
            .LoadLinkNestedLinkedSourceById(
                linkedSource => linkedSource.Model.PersonGroupId,
                linkedSource => linkedSource.PersonGroup
                );
            loadLinkProtocolBuilder.For <PersonGroupLinkedSource>()
            .LoadLinkReferencesByIds(
                linkedSource => linkedSource.Model.PersonIds,
                linkedSource => linkedSource.People);

            loadLinkProtocolBuilder.For <PersonLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.SummaryImageId,
                linkedSource => linkedSource.SummaryImage);
            _sut = (LoadLinkProtocol)loadLinkProtocolBuilder.Build(
                () => null //not required
                );
        }
        public LoadLinkExpressionOverridingTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <SingleReferenceLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource =>
            {
                throw new Exception("Not overridden!");
#pragma warning disable 162
                return(linkedSource.Model.SummaryImageId);

#pragma warning restore 162
            },
                linkedSource => linkedSource.SummaryImage
                );

            //override
            loadLinkProtocolBuilder.For <SingleReferenceLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.SummaryImageId + "-overridden",
                linkedSource => linkedSource.SummaryImage
                );

            _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
        public PolymorphicList_WithDependenciesBetweenItemsTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <LinkedSource>()
            .LoadLinkPolymorphicList(
                linkedSource => linkedSource.Model.PolyLinks,
                linkedSource => linkedSource.PolyLinks,
                link => link.Type,
                includes => includes.Include <Image>().AsReferenceById(
                    "image",
                    link => link.Id
                    )
                .Include <PersonLinkedSource>().AsNestedLinkedSourceById(
                    "person",
                    link => link.Id
                    )
                );
            loadLinkProtocolBuilder.For <PersonLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.SummaryImageId,
                linkedSource => linkedSource.SummaryImage);

            _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
예제 #11
0
        public NestedLinkedSourcesTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <NestedLinkedSources>()
            .LoadLinkNestedLinkedSourcesByIds(
                linkedSource => linkedSource.Model.AuthorIds,
                linkedSource => linkedSource.Authors);
            loadLinkProtocolBuilder.For <PersonLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.SummaryImageId,
                linkedSource => linkedSource.SummaryImage);

            _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
        public void LoadLink_WithDiscriminantDuplicate_ShouldThrow()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            Action act = () => loadLinkProtocolBuilder.For <PolymorphicSubLinkedSourceTests.LinkedSource>()
                         .LoadLinkPolymorphic(
                linkedSource => linkedSource.Model.Target,
                linkedSource => linkedSource.Target,
                link => link.Type,
                includes => includes.Include <PolymorphicSubLinkedSourceTests.WebPageReferenceLinkedSource>().AsNestedLinkedSourceFromModel(
                    "web-page",
                    _ => new PolymorphicSubLinkedSourceTests.WebPageReference()
                    )
                .Include <PolymorphicSubLinkedSourceTests.WebPageReferenceLinkedSource>().AsNestedLinkedSourceFromModel(
                    "web-page",
                    _ => new PolymorphicSubLinkedSourceTests.WebPageReference()
                    )
                );

            var ex = Assert.Throws <LinkItException>(act);

            Assert.Contains("LinkedSource", ex.Message);
            Assert.Contains("linkedSource.Target", ex.Message);
            Assert.Contains("web-page", ex.Message);
        }
예제 #13
0
        public PolymorphicNestedLinkedSourcesTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <WithNestedPolymorphicContentsLinkedSource>()
            .LoadLinkPolymorphicList(
                linkedSource => linkedSource.Model.ContentContextualizations,
                linkedSource => linkedSource.Contents,
                link => link.ContentType,
                includes => includes.Include <PersonWithoutContextualizationLinkedSource>().AsNestedLinkedSourceById(
                    "person",
                    link => (string)link.Id)
                .Include <ImageWithContextualizationLinkedSource>().AsNestedLinkedSourceById(
                    "image",
                    link => (string)link.Id,
                    (linkedSource, referenceIndex, childLinkedSource) =>
            {
                var contextualization = linkedSource.Model.ContentContextualizations[referenceIndex];
                childLinkedSource.ContentContextualization = contextualization;
            }
                    )
                );

            _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
예제 #14
0
        public SimplestRootLinkedSourceTest()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <LinkedSource>();
            _sut = (LoadLinkProtocol)loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
예제 #15
0
        public OptionalNestedLinkedSourceTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <LinkedSource>()
            .LoadLinkNestedLinkedSourceById(
                linkedSource => linkedSource.Model.MediaId,
                linkedSource => linkedSource.Media
                );

            loadLinkProtocolBuilder.For <MediaLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.SummaryImageId,
                linkedSource => linkedSource.SummaryImage);

            _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
예제 #16
0
        public void ApplySingleValueConventionGeneric <TLinkedSource, TLinkTargetProperty, TLinkedSourceModelProperty>(ConventionMatch match)
        {
            var getLinkTargetProperty = FuncGenerator.GenerateFromGetterAsExpression <TLinkedSource, TLinkTargetProperty>(
                match.LinkTargetProperty.Name
                );
            var getLinkedSourceModelProperty = FuncGenerator
                                               .GenerateFromGetter <TLinkedSource, TLinkedSourceModelProperty>(
                $"Model.{match.LinkedSourceModelProperty.Name}"
                );

            var casted = (ISingleValueConvention)match.Convention;

            casted.Apply(
                _loadLinkProtocolBuilder.For <TLinkedSource>(),
                getLinkedSourceModelProperty,
                getLinkTargetProperty,
                match.LinkedSourceModelProperty, match.LinkTargetProperty);
        }
예제 #17
0
        public LoadLinkModelTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <SingleReferenceLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.SummaryImageId,
                linkedSource => linkedSource.SummaryImage);
            _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
예제 #18
0
        public LoadLinkPrimitiveModelTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <PrimitiveLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model,
                linkedSource => linkedSource.Media);
            _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
예제 #19
0
        public ContextualizationTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <WithContextualizedReferenceLinkedSource>()
            .LoadLinkNestedLinkedSourceById(
                linkedSource => linkedSource.Model.PersonContextualization.Id,
                linkedSource => linkedSource.Person,
                (linkedSource, childLinkedSource) =>
                childLinkedSource.Contextualization = linkedSource.Model.PersonContextualization
                );
            loadLinkProtocolBuilder.For <PersonContextualizedLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource =>
                linkedSource.Contextualization.SummaryImageId ??
                linkedSource.Model.SummaryImageId,
                linkedSource => linkedSource.SummaryImage);

            _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
예제 #20
0
        public NestedLinkedSourceTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <NestedLinkedSource>()
            .LoadLinkNestedLinkedSourceById(
                linkedSource => linkedSource.Model.AuthorDetailId,
                linkedSource => linkedSource.AuthorDetail)
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.ClientSummaryId,
                linkedSource => linkedSource.ClientSummary);

            loadLinkProtocolBuilder.For <PersonLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.SummaryImageId,
                linkedSource => linkedSource.SummaryImage);

            _referenceLoaderStub = new ReferenceLoaderStub();
            _sut = loadLinkProtocolBuilder.Build(() => _referenceLoaderStub);
        }
예제 #21
0
        public LoadLinkByIdsTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <PersonLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.SummaryImageId,
                linkedSource => linkedSource.SummaryImage);

            _referenceLoaderStub = new ReferenceLoaderStub();
            _sut = loadLinkProtocolBuilder.Build(() => _referenceLoaderStub);
        }
        public void CreateLoadLinkConfig_WithCycleCausedByIndirectNestedLinkedSource_ShouldThrow()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <IndirectCycleLevel0LinkedSource>()
            .LoadLinkNestedLinkedSourceById(
                linkedSource => linkedSource.Model.Level1Id,
                linkedSource => linkedSource.Level1
                );
            loadLinkProtocolBuilder.For <IndirectCycleLevel1LinkedSource>()
            .LoadLinkNestedLinkedSourceById(
                linkedSource => linkedSource.Model.Level0Id,
                linkedSource => linkedSource.Level0
                );

            Action act = () => loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());

            var exception = Assert.Throws <InvalidOperationException>(act);

            Assert.Equal($"Recursive dependency detected for type {{ {typeof(IndirectCycleLevel0LinkedSource).Name} }}.", exception.Message);
        }
예제 #23
0
        public void CreateLoadLinkConfig_WithCycleCausedByNestedLinkedSourceReference_ShouldThrow()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <ParentLinkedSource>()
            .LoadLinkNestedLinkedSourceById(
                linkedSource => linkedSource.Model.ChildId,
                linkedSource => linkedSource.Child
                );
            loadLinkProtocolBuilder.For <ChildLinkedSource>()
            .LoadLinkNestedLinkedSourceById(
                linkedSource => linkedSource.Model.ParentId,
                linkedSource => linkedSource.Parent
                );

            Action act = () => loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());

            var exception = Assert.Throws <InvalidOperationException>(act);

            Assert.Equal($"Recursive dependency detected for type {{ {nameof(ParentLinkedSource)} }}.", exception.Message);
        }
예제 #24
0
        public NestedLinkedSourceTest()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <LinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.PreImageId,
                linkedSource => linkedSource.PreImage)
            .LoadLinkNestedLinkedSourceById(
                linkedSource => linkedSource.Model.PersonId,
                linkedSource => linkedSource.Person
                )
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.PostImageId,
                linkedSource => linkedSource.PostImage);
            loadLinkProtocolBuilder.For <PersonLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.SummaryImageId,
                linkedSource => linkedSource.SummaryImage);
            _sut = (LoadLinkProtocol)loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
예제 #25
0
        public SubLinkedSourceTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <SubContentOwnerLinkedSource>()
            .LoadLinkNestedLinkedSourceFromModel(
                linkedSource => linkedSource.Model.SubContent,
                linkedSource => linkedSource.SubContent)
            .LoadLinkNestedLinkedSourceFromModel(
                linkedSource => linkedSource.Model.SubSubContent,
                linkedSource => linkedSource.SubSubContent);
            loadLinkProtocolBuilder.For <SubContentLinkedSource>()
            .LoadLinkNestedLinkedSourceFromModel(
                linkedSource => linkedSource.Model.SubSubContent,
                linkedSource => linkedSource.SubSubContent);
            loadLinkProtocolBuilder.For <SubSubContentLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.SummaryImageId,
                linkedSource => linkedSource.SummaryImage);

            _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
        public ImageWithRatiosCustomLoadLinkTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <WithImageLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.ImageUrl,
                linkedSource => linkedSource.Image);

            _sut = loadLinkProtocolBuilder.Build(() =>
                                                 new ReferenceLoaderStub(new ImageReferenceTypeConfigWorkAround())
                                                 );
        }
        public ContextualizationFromRootTests()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <PersonContextualizedLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource =>
                linkedSource.Contextualization?.SummaryImageId ??
                linkedSource.Model.SummaryImageId,
                linkedSource => linkedSource.SummaryImage);

            _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }
예제 #28
0
        public void CreateLoadLinkConfig_WithCycleCausedByReference_ShouldNotThrow()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <CycleInReferenceLinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.ParentId,
                linkedSource => linkedSource.Parent);

            var loadLinkProtocol = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());

            Assert.NotNull(loadLinkProtocol);
        }
        public void ApplySingleValueConventionGeneric <TLinkedSource, TLinkTargetProperty, TLinkedSourceModelProperty>(ConventionMatch match, MethodInfo applyMethod)
            where TLinkedSource : ILinkedSource
        {
            var getLinkTargetProperty = FuncGenerator.GenerateFromGetterAsExpression <TLinkedSource, TLinkTargetProperty>(
                match.LinkTargetProperty.Name
                );
            var getLinkedSourceModelProperty = FuncGenerator
                                               .GenerateFromGetter <TLinkedSource, TLinkedSourceModelProperty>(
                $"Model.{match.LinkedSourceModelProperty.Name}"
                );

            var parameters = new object[]
            {
                _loadLinkProtocolBuilder.For <TLinkedSource>(),
                getLinkedSourceModelProperty,
                getLinkTargetProperty,
                match.LinkedSourceModelProperty,
                match.LinkTargetProperty
            };

            applyMethod.Invoke(match.Convention, parameters);
        }
예제 #30
0
        public ReferenceTest()
        {
            var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder();

            loadLinkProtocolBuilder.For <LinkedSource>()
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.PersonOneId,
                linkedSource => linkedSource.PersonOne)
            .LoadLinkReferenceById(
                linkedSource => linkedSource.Model.PersonTwoId,
                linkedSource => linkedSource.PersonTwo
                );
            _sut = (LoadLinkProtocol)loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub());
        }