Browse Source

Removed autofac from infrastructure

pull/1/head
Sebastian 9 years ago
parent
commit
9deb58ad7d
  1. 33
      src/Squidex.Infrastructure/CQRS/Autofac/AutofacDomainObjectFactory.cs
  2. 34
      src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectFactory.cs
  3. 1
      src/Squidex.Infrastructure/project.json
  4. 23
      tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectFactoryTests.cs
  5. 28
      tests/Squidex.Infrastructure.Tests/CQRS/DomainObjectTest.cs

33
src/Squidex.Infrastructure/CQRS/Autofac/AutofacDomainObjectFactory.cs

@ -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));
}
}
}

34
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<out T>(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);
}
}
}

1
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",

23
tests/Squidex.Infrastructure.Tests/CQRS/Autofac/AutofacDomainObjectFactoryTests.cs → 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<IServiceProvider>();
containerBuilder.RegisterType<DO>()
.AsSelf();
var factoryFunction = new DomainObjectFactoryFunction<DO>(passedId =>
{
return new DO(passedId, 0);
});
serviceProvider.Setup(x => x.GetService(typeof(DomainObjectFactoryFunction<DO>))).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);

28
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());

Loading…
Cancel
Save