From 9deb58ad7d60b80f4419d7b4fd65d01d3b71d3d7 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Fri, 3 Feb 2017 19:54:29 +0100 Subject: [PATCH] Removed autofac from infrastructure --- .../Autofac/AutofacDomainObjectFactory.cs | 33 ------------------ .../Commands/DefaultDomainObjectFactory.cs | 34 +++++++++++++++++++ src/Squidex.Infrastructure/project.json | 1 - .../DefaultDomainObjectFactoryTests.cs} | 23 ++++++++----- .../CQRS/DomainObjectTest.cs | 28 +++++++-------- 5 files changed, 62 insertions(+), 57 deletions(-) delete mode 100644 src/Squidex.Infrastructure/CQRS/Autofac/AutofacDomainObjectFactory.cs create mode 100644 src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectFactory.cs rename tests/Squidex.Infrastructure.Tests/CQRS/{Autofac/AutofacDomainObjectFactoryTests.cs => Commands/DefaultDomainObjectFactoryTests.cs} (57%) diff --git a/src/Squidex.Infrastructure/CQRS/Autofac/AutofacDomainObjectFactory.cs b/src/Squidex.Infrastructure/CQRS/Autofac/AutofacDomainObjectFactory.cs deleted file mode 100644 index f32bebede..000000000 --- a/src/Squidex.Infrastructure/CQRS/Autofac/AutofacDomainObjectFactory.cs +++ /dev/null @@ -1,33 +0,0 @@ -// ========================================================================== -// AutofacDomainObjectFactory.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -using System; -using Autofac; -using Squidex.Infrastructure.CQRS.Commands; - -namespace Squidex.Infrastructure.CQRS.Autofac -{ - public sealed class AutofacDomainObjectFactory : IDomainObjectFactory - { - private readonly ILifetimeScope lifetimeScope; - - public AutofacDomainObjectFactory(ILifetimeScope lifetimeScope) - { - Guard.NotNull(lifetimeScope, nameof(lifetimeScope)); - - this.lifetimeScope = lifetimeScope; - } - - public IAggregate CreateNew(Type type, Guid id) - { - return (IAggregate)lifetimeScope.Resolve(type, - new NamedParameter("id", id), - new NamedParameter("version", 0)); - } - } -} diff --git a/src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectFactory.cs b/src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectFactory.cs new file mode 100644 index 000000000..24efb3956 --- /dev/null +++ b/src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectFactory.cs @@ -0,0 +1,34 @@ +// ========================================================================== +// DefaultDomainObjectFactory.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System; + +namespace Squidex.Infrastructure.CQRS.Commands +{ + public delegate T DomainObjectFactoryFunction(Guid id) where T : IAggregate; + + public class DefaultDomainObjectFactory : IDomainObjectFactory + { + private readonly IServiceProvider serviceProvider; + + public DefaultDomainObjectFactory(IServiceProvider serviceProvider) + { + Guard.NotNull(serviceProvider, nameof(serviceProvider)); + + this.serviceProvider = serviceProvider; + } + + public IAggregate CreateNew(Type type, Guid id) + { + var factoryFunctionType = typeof(DomainObjectFactoryFunction<>).MakeGenericType(type); + var factoryFunction = (Delegate)serviceProvider.GetService(factoryFunctionType); + + return (IAggregate)factoryFunction.DynamicInvoke(id); + } + } +} diff --git a/src/Squidex.Infrastructure/project.json b/src/Squidex.Infrastructure/project.json index b1de80bfe..b7a0458ef 100644 --- a/src/Squidex.Infrastructure/project.json +++ b/src/Squidex.Infrastructure/project.json @@ -1,7 +1,6 @@ { "version": "1.0.0-*", "dependencies": { - "Autofac": "4.3.0", "Microsoft.Extensions.Logging": "1.1.0", "Newtonsoft.Json": "9.0.2-beta2", "NodaTime": "2.0.0-beta20170123", diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/Autofac/AutofacDomainObjectFactoryTests.cs b/tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectFactoryTests.cs similarity index 57% rename from tests/Squidex.Infrastructure.Tests/CQRS/Autofac/AutofacDomainObjectFactoryTests.cs rename to tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectFactoryTests.cs index d35edc141..40428b1ea 100644 --- a/tests/Squidex.Infrastructure.Tests/CQRS/Autofac/AutofacDomainObjectFactoryTests.cs +++ b/tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectFactoryTests.cs @@ -1,5 +1,5 @@ // ========================================================================== -// AutofacDomainObjectFactoryTests.cs +// DefaultDomainObjectFactoryTests.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group @@ -7,13 +7,14 @@ // ========================================================================== using System; -using Autofac; +using Moq; using Squidex.Infrastructure.CQRS.Events; using Xunit; +// ReSharper disable ConvertToLambdaExpression -namespace Squidex.Infrastructure.CQRS.Autofac +namespace Squidex.Infrastructure.CQRS.Commands { - public class AutofacDomainObjectFactoryTests + public class DefaultDomainObjectFactoryTests { private sealed class DO : DomainObject { @@ -29,16 +30,20 @@ namespace Squidex.Infrastructure.CQRS.Autofac [Fact] public void Should_create_domain_object_with_autofac() { - var containerBuilder = new ContainerBuilder(); + var serviceProvider = new Mock(); - containerBuilder.RegisterType() - .AsSelf(); + var factoryFunction = new DomainObjectFactoryFunction(passedId => + { + return new DO(passedId, 0); + }); + + serviceProvider.Setup(x => x.GetService(typeof(DomainObjectFactoryFunction))).Returns(factoryFunction); - var factory = new AutofacDomainObjectFactory(containerBuilder.Build()); + var sut = new DefaultDomainObjectFactory(serviceProvider.Object); var id = Guid.NewGuid(); - var domainObject = factory.CreateNew(typeof(DO), id); + var domainObject = sut.CreateNew(typeof(DO), id); Assert.Equal(id, domainObject.Id); Assert.Equal(0, domainObject.Version); diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/DomainObjectTest.cs b/tests/Squidex.Infrastructure.Tests/CQRS/DomainObjectTest.cs index 65303fcb5..7134ae7bb 100644 --- a/tests/Squidex.Infrastructure.Tests/CQRS/DomainObjectTest.cs +++ b/tests/Squidex.Infrastructure.Tests/CQRS/DomainObjectTest.cs @@ -20,9 +20,9 @@ namespace Squidex.Infrastructure.CQRS { } - private sealed class UserDomainObject : DomainObject + private sealed class DO : DomainObject { - public UserDomainObject(Guid id, int version) + public DO(Guid id, int version) : base(id, version) { } @@ -42,7 +42,7 @@ namespace Squidex.Infrastructure.CQRS { var id = Guid.NewGuid(); var ver = 123; - var sut = new UserDomainObject(id, ver); + var sut = new DO(id, ver); Assert.Equal(id, sut.Id); Assert.Equal(ver, sut.Version); @@ -54,7 +54,7 @@ namespace Squidex.Infrastructure.CQRS var event1 = new MyEvent(); var event2 = new MyEvent(); - var sut = new UserDomainObject(Guid.NewGuid(), 10); + var sut = new DO(Guid.NewGuid(), 10); IAggregate aggregate = sut; @@ -76,7 +76,7 @@ namespace Squidex.Infrastructure.CQRS var event1 = new MyEvent(); var event2 = new MyEvent(); - var sut = new UserDomainObject(Guid.NewGuid(), 10); + var sut = new DO(Guid.NewGuid(), 10); IAggregate aggregate = sut; @@ -93,9 +93,9 @@ namespace Squidex.Infrastructure.CQRS var id1 = Guid.NewGuid(); var id2 = Guid.NewGuid(); - var user1a = new UserDomainObject(id1, 1); - var user1b = new UserDomainObject(id1, 2); - var user2 = new UserDomainObject(id2, 2); + var user1a = new DO(id1, 1); + var user1b = new DO(id1, 2); + var user2 = new DO(id2, 2); Assert.True(user1a.Equals(user1b)); @@ -108,10 +108,10 @@ namespace Squidex.Infrastructure.CQRS var id1 = Guid.NewGuid(); var id2 = Guid.NewGuid(); - var user1a = new UserDomainObject(id1, 1); + var user1a = new DO(id1, 1); - object user1b = new UserDomainObject(id1, 2); - object user2 = new UserDomainObject(id2, 2); + object user1b = new DO(id1, 2); + object user2 = new DO(id2, 2); Assert.True(user1a.Equals(user1b)); @@ -124,9 +124,9 @@ namespace Squidex.Infrastructure.CQRS var id1 = Guid.NewGuid(); var id2 = Guid.NewGuid(); - var user1a = new UserDomainObject(id1, 1); - var user1b = new UserDomainObject(id1, 2); - var user2 = new UserDomainObject(id2, 2); + var user1a = new DO(id1, 1); + var user1b = new DO(id1, 2); + var user2 = new DO(id2, 2); Assert.Equal(user1a.GetHashCode(), user1b.GetHashCode());