Last active
February 5, 2019 13:55
-
-
Save sebnilsson/f9ed88934206fbab1decbe62491a2570 to your computer and use it in GitHub Desktop.
Registering Autofac & AutoMapper Circularly
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static void Main(string[] args) | |
{ | |
var components = RegisterComponents(); | |
Run(components); | |
} | |
private static IContainer RegisterComponents() | |
{ | |
var builder = new ContainerBuilder(); | |
builder.RegisterType<PreMapperComponent>().As<IPreMapperComponent>(); | |
builder.Register(ConfigureMapper).SingleInstance(); | |
builder.RegisterType<PostMapperComponent>().As<IPostMapperComponent>(); | |
return builder.Build(); | |
} | |
private static void Run(IContainer container) | |
{ | |
var mapper = container.Resolve<IMapper>(); | |
var source = new EntityType(123, "Test-text", "Test-description"); | |
var dto = mapper.Map<DtoType>(source); | |
dto.RunComponents(); | |
} | |
private static IMapper ConfigureMapper(IComponentContext context) | |
{ | |
var configuration = new MapperConfiguration(config => | |
{ | |
var ctx = context.Resolve<IComponentContext>(); | |
config.CreateMap<EntityType, DtoType>() | |
.ConstructUsing(_ => | |
new DtoType(ctx.Resolve<IPreMapperComponent>(), ctx.Resolve<IPostMapperComponent>())); | |
}); | |
return configuration.CreateMapper(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public interface IPreMapperComponent | |
{ | |
void Run(); | |
} | |
public class PreMapperComponent : IPreMapperComponent | |
{ | |
public void Run() | |
{ | |
Console.WriteLine("PreMapperComponent.Run executed."); | |
} | |
} | |
public interface IPostMapperComponent | |
{ | |
void Run(); | |
} | |
public class PostMapperComponent : IPostMapperComponent | |
{ | |
public void Run() | |
{ | |
Console.WriteLine("PostMapperComponent.Run executed."); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class DtoType | |
{ | |
private readonly IPostMapperComponent _postComponent; | |
private readonly IPreMapperComponent _preComponent; | |
public DtoType(IPreMapperComponent preComponent, IPostMapperComponent postComponent) | |
{ | |
_preComponent = preComponent; | |
_postComponent = postComponent; | |
} | |
public int Id { get; set; } | |
public string Text { get; set; } | |
public void RunComponents() | |
{ | |
_preComponent.Run(); | |
_postComponent.Run(); | |
} | |
} | |
public class EntityType | |
{ | |
public EntityType(int id, string text, string description) | |
{ | |
Id = id; | |
Text = text; | |
Description = description; | |
} | |
public int Id { get; set; } | |
public string Description { get; set; } | |
public string Text { get; set; } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment