public void depdendencies_are_incremented_when_property_set() { var metadataFactory = new AttributeMetadataFactory(new NullLogger()); var queryExecutorFactory = new Mock <IQueryExecutorFactory>(); var repositoryFactory = new Mock <IRepositoryFactory>(); var stateTracker = new EntityStateCache(); var proxyFactory = new DynamicProxyFactory(metadataFactory, new NullLogger()); using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory.Object, stateTracker, proxyFactory)) { var factory = new DynamicProxyFactory(metadataFactory, new NullLogger()); var parent = factory.Create(new Parent { Id = "parent" }, session); var child = factory.Create(new Child { Id = "child" }, session); parent.Child = child; var parentState = stateTracker.Get(parent); Assert.Equal(2, parentState.Dependencies.Sequence); var childState = stateTracker.Get(child); Assert.Equal(1, childState.Dependencies.Sequence); } }
public void factory_creates_meta_data_correctly_from_a_proxy_object() { var metadataFactory = new AttributeMetadataFactory(new NullLogger()); var queryExecutorFactory = new Mock <IQueryExecutorFactory>(); var repositoryFactory = new Mock <IRepositoryFactory>(); var stateTracker = new EntityStateCache(); var proxyFactory = new DynamicProxyFactory(metadataFactory, new NullLogger()); using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory.Object, stateTracker, proxyFactory)) { var factory = new DynamicProxyFactory(metadataFactory, new NullLogger()); var item = new Parent { Id = "1", Child = new Child { Id = "2" }, Children = new List <Child> { new Child { Id = "3" } } }; var proxy = factory.Create(item, session); var parentMetadata = metadataFactory.Create(proxy); Assert.Equal("Parent", parentMetadata.Name); var childMetadta = metadataFactory.Create(proxy.Child); Assert.Equal("Child", childMetadta.Name); } }
public void properties_which_are_marked_as_ignored_are_not_proxied() { var metadataFactory = new AttributeMetadataFactory(new NullLogger()); var queryExecutorFactory = new Mock <IQueryExecutorFactory>(); var repositoryFactory = new Mock <IRepositoryFactory>(); var stateTracker = new EntityStateCache(); var proxyFactory = new DynamicProxyFactory(metadataFactory, new NullLogger()); using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory.Object, stateTracker, proxyFactory)) { var factory = new DynamicProxyFactory(metadataFactory, new NullLogger()); var item = new EntityWithIgnoredProperty { Id = "1", Ignored = new AnotherEntity { Id = "2" }, Proxied = new AnotherEntity { Id = "3" } }; var proxy = factory.Create(item, session); Assert.True(ProxyUtils.IsProxy(proxy)); Assert.True(ProxyUtils.IsProxy(proxy.Proxied)); Assert.False(ProxyUtils.IsProxy(proxy.Ignored)); } }
public void objects_with_inheritance_chain_are_proxied_correctly() { var metadataFactory = new AttributeMetadataFactory(new NullLogger()); var proxyFactory = new DynamicProxyFactory(metadataFactory, new NullLogger()); var queryExecutorFactory = new Mock <IQueryExecutorFactory>(); var repositoryFactory = new RepositoryFactory(proxyFactory); var parentMapper = new Mock <IMapper <Parent> >(); repositoryFactory.Register <Parent>(x => parentMapper.Object); var childMapper = new Mock <IMapper <Child> >(); repositoryFactory.Register <Child>(x => childMapper.Object); var stateTracker = new EntityStateCache(); using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory, stateTracker, proxyFactory)) { var entity = new ParentWithInheritedChild { Id = "1", Type = new SuperTypeA { Id = "1" } }; var proxy = proxyFactory.Create(entity, session); Assert.True(proxy.Type is SuperTypeA); } }
public void circular_dependencies_are_proxied_correctly() { var metadataFactory = new AttributeMetadataFactory(new NullLogger()); var proxyFactory = new DynamicProxyFactory(metadataFactory, new NullLogger()); var queryExecutorFactory = new Mock <IQueryExecutorFactory>(); var repositoryFactory = new RepositoryFactory(proxyFactory); var parentMapper = new Mock <IMapper <Parent> >(); repositoryFactory.Register <Parent>(x => parentMapper.Object); var childMapper = new Mock <IMapper <Child> >(); repositoryFactory.Register <Child>(x => childMapper.Object); var stateTracker = new EntityStateCache(); using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory, stateTracker, proxyFactory)) { var a = new EntityA { Id = "a" }; var b = new EntityB { Id = "b" }; a.EntityB = b; b.EntityA = a; var proxy = proxyFactory.Create(a, session); Assert.NotNull(proxy); Assert.NotNull(proxy.EntityB); Assert.NotNull(proxy.EntityB.EntityA); Assert.Same(proxy, proxy.EntityB.EntityA); } }
public void all_objects_in_the_object_graph_are_proxied() { var metadataFactory = new AttributeMetadataFactory(new NullLogger()); var queryExecutorFactory = new Mock <IQueryExecutorFactory>(); var repositoryFactory = new Mock <IRepositoryFactory>(); var stateTracker = new EntityStateCache(); var proxyFactory = new DynamicProxyFactory(metadataFactory, new NullLogger()); using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory.Object, stateTracker, proxyFactory)) { var factory = new DynamicProxyFactory(metadataFactory, new NullLogger()); var item = new Person { Id = "1", Contacts = new List <Contact> { new Contact { Id = "1" } } }; var proxy = factory.Create(item, session); Assert.True(ProxyUtils.IsProxy(proxy)); Assert.True(proxy.Contacts is ITrackableCollection <Contact>); Assert.True(ProxyUtils.IsProxy(proxy.Contacts[0])); } }
public void nullable_types_are_ignored() { var metadataFactory = new AttributeMetadataFactory(new NullLogger()); var proxyFactory = new DynamicProxyFactory(metadataFactory, new NullLogger()); var queryExecutorFactory = new Mock <IQueryExecutorFactory>(); var repositoryFactory = new RepositoryFactory(proxyFactory); var parentMapper = new Mock <IMapper <Parent> >(); repositoryFactory.Register <Parent>(x => parentMapper.Object); var childMapper = new Mock <IMapper <Child> >(); repositoryFactory.Register <Child>(x => childMapper.Object); var stateTracker = new EntityStateCache(); using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory, stateTracker, proxyFactory)) { var entity = new EntityWithNullableType { Id = "1", Date = DateTime.Now }; var proxy = proxyFactory.Create(entity, session); Assert.NotNull(proxy.Date); } }
static void Main(string[] args) { var type = DynamicProxyFactory.Create(typeof(ITestClass), typeof(TestClass)); var obj = (ITestClass)Activator.CreateInstance(type, "A", "B"); obj.Test("A", "B", 3); }
public static IServiceCollection AddWithProxy(this IServiceCollection collection, Type interfaceType, Type implementationType, ServiceLifetime lifetime) { var proxyType = DynamicProxyFactory.Create(interfaceType, implementationType); var serviceDescriptor = new ServiceDescriptor(interfaceType, proxyType, lifetime); collection.Add(serviceDescriptor); return(collection); }
public async Task DynamicProxyFactory_SimpleAOP_Async_Test() { ICalculatorAsync decorate = DynamicProxyFactory <ICalculatorAsync> .Create(_calcAsync, info => Trace.WriteLine($"Before {info}"), info => Trace.WriteLine($"After {info}"), info => Trace.WriteLine($"Error {info}")); int i = await decorate.AddAsync(1, 2); Trace.WriteLine($"Result = {i}"); }
public void DynamicProxyFactory_SimpleAOP_Test() { ICalculator decorate = DynamicProxyFactory <ICalculator> .Create(_calc, info => Trace.WriteLine($"Before {info}"), info => Trace.WriteLine($"After {info}"), info => Trace.WriteLine($"Error {info}")); int i = decorate.Add(1, 2); Trace.WriteLine($"Result = {i}"); }
public void a_proxy_is_generated_for_trackable_relationships() { var metadataFactory = new AttributeMetadataFactory(new NullLogger()); var queryExecutorFactory = new Mock <IQueryExecutorFactory>(); var repositoryFactory = new Mock <IRepositoryFactory>(); var stateTracker = new EntityStateCache(); var proxyFactory = new DynamicProxyFactory(metadataFactory, new NullLogger()); using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory.Object, stateTracker, proxyFactory)) { var person = new Person { Id = "1", Name = "Test", Address = new Address { Id = "1", Name = "first address" } }; var proxy = proxyFactory.Create(person, session); proxy.Address = null; proxy.Address = proxyFactory.Create(new Address { Id = "2" }, session); var metadata = metadataFactory.Create(proxy); var trackableRelationships = ProxyUtils.Flush(proxy, metadata["Address"].Relationship).ToList(); Assert.Equal(1, trackableRelationships.Count); foreach (var trackableRelationship in trackableRelationships) { var enumerable = trackableRelationship.Flush(); var results = enumerable.Cast <object>().ToList(); Assert.Equal(1, results.Count); Assert.Equal("1", ((Address)results[0]).Id); Assert.Equal("2", proxy.Address.Id); } } }
public void reverse_property_is_set_correctly_on_one_to_one_relationships() { var metadataFactory = new AttributeMetadataFactory(new NullLogger()); var queryExecutorFactory = new Mock <IQueryExecutorFactory>(); var repositoryFactory = new Mock <IRepositoryFactory>(); var stateTracker = new EntityStateCache(); var proxyFactory = new DynamicProxyFactory(metadataFactory, new NullLogger()); using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory.Object, stateTracker, proxyFactory)) { var factory = new DynamicProxyFactory(metadataFactory, new NullLogger()); var alpha = factory.Create(new ClassAlpha { Id = "1" }, session); var beta = factory.Create(new ClassBeta { Id = "2" }, session); alpha.Beta = beta; var metadata = metadataFactory.Create(beta); Assert.True(metadata["Alpha"].Relationship.IsReverse); } }
public void properties_set_during_construction_are_restored_after_proxy_created() { var metadataFactory = new AttributeMetadataFactory(new NullLogger()); var queryExecutorFactory = new Mock <IQueryExecutorFactory>(); var repositoryFactory = new Mock <IRepositoryFactory>(); var stateTracker = new EntityStateCache(); var proxyFactory = new DynamicProxyFactory(metadataFactory, new NullLogger()); using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory.Object, stateTracker, proxyFactory)) { var factory = new DynamicProxyFactory(metadataFactory, new NullLogger()); var item = new EntityWithPropertiesSetInConstructor("1", "Test"); var proxy = factory.Create(item, session); Assert.Equal("1", proxy.Id); Assert.Equal("Test", proxy.Name); } }
public void an_exception_is_thrown_if_id_null() { var metadataFactory = new AttributeMetadataFactory(new NullLogger()); var queryExecutorFactory = new Mock <IQueryExecutorFactory>(); var repositoryFactory = new Mock <IRepositoryFactory>(); var stateTracker = new EntityStateCache(); var proxyFactory = new DynamicProxyFactory(metadataFactory, new NullLogger()); using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory.Object, stateTracker, proxyFactory)) { Assert.Throws <PropertyNotSetException>(() => { var factory = new DynamicProxyFactory(metadataFactory, new NullLogger()); var notSet = new AnotherEntity(); factory.Create(notSet, session); }); } }