Browse Source

Removed autofac from infrastructure

pull/1/head
Sebastian 10 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-*", "version": "1.0.0-*",
"dependencies": { "dependencies": {
"Autofac": "4.3.0",
"Microsoft.Extensions.Logging": "1.1.0", "Microsoft.Extensions.Logging": "1.1.0",
"Newtonsoft.Json": "9.0.2-beta2", "Newtonsoft.Json": "9.0.2-beta2",
"NodaTime": "2.0.0-beta20170123", "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 // Squidex Headless CMS
// ========================================================================== // ==========================================================================
// Copyright (c) Squidex Group // Copyright (c) Squidex Group
@ -7,13 +7,14 @@
// ========================================================================== // ==========================================================================
using System; using System;
using Autofac; using Moq;
using Squidex.Infrastructure.CQRS.Events; using Squidex.Infrastructure.CQRS.Events;
using Xunit; 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 private sealed class DO : DomainObject
{ {
@ -29,16 +30,20 @@ namespace Squidex.Infrastructure.CQRS.Autofac
[Fact] [Fact]
public void Should_create_domain_object_with_autofac() public void Should_create_domain_object_with_autofac()
{ {
var containerBuilder = new ContainerBuilder(); var serviceProvider = new Mock<IServiceProvider>();
containerBuilder.RegisterType<DO>() var factoryFunction = new DomainObjectFactoryFunction<DO>(passedId =>
.AsSelf(); {
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 id = Guid.NewGuid();
var domainObject = factory.CreateNew(typeof(DO), id); var domainObject = sut.CreateNew(typeof(DO), id);
Assert.Equal(id, domainObject.Id); Assert.Equal(id, domainObject.Id);
Assert.Equal(0, domainObject.Version); 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) : base(id, version)
{ {
} }
@ -42,7 +42,7 @@ namespace Squidex.Infrastructure.CQRS
{ {
var id = Guid.NewGuid(); var id = Guid.NewGuid();
var ver = 123; var ver = 123;
var sut = new UserDomainObject(id, ver); var sut = new DO(id, ver);
Assert.Equal(id, sut.Id); Assert.Equal(id, sut.Id);
Assert.Equal(ver, sut.Version); Assert.Equal(ver, sut.Version);
@ -54,7 +54,7 @@ namespace Squidex.Infrastructure.CQRS
var event1 = new MyEvent(); var event1 = new MyEvent();
var event2 = new MyEvent(); var event2 = new MyEvent();
var sut = new UserDomainObject(Guid.NewGuid(), 10); var sut = new DO(Guid.NewGuid(), 10);
IAggregate aggregate = sut; IAggregate aggregate = sut;
@ -76,7 +76,7 @@ namespace Squidex.Infrastructure.CQRS
var event1 = new MyEvent(); var event1 = new MyEvent();
var event2 = new MyEvent(); var event2 = new MyEvent();
var sut = new UserDomainObject(Guid.NewGuid(), 10); var sut = new DO(Guid.NewGuid(), 10);
IAggregate aggregate = sut; IAggregate aggregate = sut;
@ -93,9 +93,9 @@ namespace Squidex.Infrastructure.CQRS
var id1 = Guid.NewGuid(); var id1 = Guid.NewGuid();
var id2 = Guid.NewGuid(); var id2 = Guid.NewGuid();
var user1a = new UserDomainObject(id1, 1); var user1a = new DO(id1, 1);
var user1b = new UserDomainObject(id1, 2); var user1b = new DO(id1, 2);
var user2 = new UserDomainObject(id2, 2); var user2 = new DO(id2, 2);
Assert.True(user1a.Equals(user1b)); Assert.True(user1a.Equals(user1b));
@ -108,10 +108,10 @@ namespace Squidex.Infrastructure.CQRS
var id1 = Guid.NewGuid(); var id1 = Guid.NewGuid();
var id2 = 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 user1b = new DO(id1, 2);
object user2 = new UserDomainObject(id2, 2); object user2 = new DO(id2, 2);
Assert.True(user1a.Equals(user1b)); Assert.True(user1a.Equals(user1b));
@ -124,9 +124,9 @@ namespace Squidex.Infrastructure.CQRS
var id1 = Guid.NewGuid(); var id1 = Guid.NewGuid();
var id2 = Guid.NewGuid(); var id2 = Guid.NewGuid();
var user1a = new UserDomainObject(id1, 1); var user1a = new DO(id1, 1);
var user1b = new UserDomainObject(id1, 2); var user1b = new DO(id1, 2);
var user2 = new UserDomainObject(id2, 2); var user2 = new DO(id2, 2);
Assert.Equal(user1a.GetHashCode(), user1b.GetHashCode()); Assert.Equal(user1a.GetHashCode(), user1b.GetHashCode());

Loading…
Cancel
Save