public void SetReference(ISimpleResource reference)
 {
     References.Add(reference);
 }
示例#2
0
        public void ReplaceWithProxy()
        {
            // Arrange: Create instance and reference
            var ref1 = new DerivedResource {
                Id = 9, Foo = 20
            };
            var ref2 = new SimpleResource {
                Id = 10, Foo = 30
            };
            var nonPub = new NonPublicResource {
                Name = "NonPublic"
            };
            var instance = new ReferenceResource
            {
                Id        = 8,
                Reference = ref1,
                NonPublic = nonPub
            };

            instance.References = new ReferenceCollection <ISimpleResource>(instance,
                                                                            instance.GetType().GetProperty(nameof(ReferenceResource.References)), new List <IResource>())
            {
                ref2
            };

            // Act: Convert to proxy and access the reference
            var proxy       = (IReferenceResource)_typeController.GetProxy(instance);
            var reference   = proxy.Reference;
            var methodRef   = proxy.GetReference();
            var references  = proxy.MoreReferences.ToArray();
            var references2 = proxy.GetReferences();
            var nonPubProxy = proxy.NonPublic;

            ISimpleResource eventArgs = null;

            proxy.ReferenceChanged += (sender, resource) => eventArgs = resource;
            ISimpleResource[] eventArgs2 = null;
            proxy.SomeChanged += (sender, resources) => eventArgs2 = resources;

            // Act: Set resource property through proxy
            proxy.Reference = references[0];
            proxy.SetReference(reference);

            // Make sure all references where replaced with proxies
            Assert.AreNotEqual(ref1, reference);
            Assert.AreNotEqual(ref2, references[0]);
            Assert.AreNotEqual(ref2, references2[0]);
            Assert.AreNotEqual(nonPub, nonPubProxy);
            Assert.AreEqual(20, reference.Foo);
            Assert.AreEqual(reference, methodRef);
            Assert.AreEqual(30, references[0].Foo);
            Assert.AreEqual(30, references2[0].Foo);
            Assert.NotNull(eventArgs);
            Assert.AreEqual(30, eventArgs.Foo);
            Assert.NotNull(eventArgs2);
            Assert.AreEqual(1, eventArgs2.Length);
            Assert.AreEqual(30, eventArgs2[0].Foo);
            Assert.AreEqual("NonPublic", nonPubProxy.Name);
            // Assert modifications of the setters
            Assert.AreEqual(instance.Reference, ref2);
            Assert.AreEqual(instance.References.Count(), 2);
            Assert.AreEqual(instance.References.ElementAt(1), ref1);
        }