/Elastic

Elastic is a framework that helps to simplify the "wiring" phase of our applications.

Primary LanguageC#

Elastic is a framework that helps to simplify the "wiring" phase of our applications. Elastic promote Composition Root pattern by MEF.

Usage:

//in our app entry point, global.asax for example
=========================================================================================
//setup Composition Service (MEF powered)
var compositionService = new CompositionContainer(new DirectoryCatalog(@"."));
Extensibility.Composer = () => compositionService;

//bootstrapp the IOC Container, the Root
var container = new Container();
Bootstrap.This(() => container);
=========================================================================================


//after write an installer plugin for configure our container dependencies
=========================================================================================
/// <summary>
/// Boostrapp Automapper and Register in Container
/// </summary>
[ExportInstaller(1, typeof (IInstaller<IContainer>))]
public class BootstrapAutoMapper : InstallerBase<IContainer>
{
	#region Overrides of InstallerBase<IContainer>

	/// <summary>
	/// </summary>
	/// <param name = "object"></param>
	protected override void Configure(IContainer @object)
	{
		//create automapper configuration object
		var cfg = new ConfigurationStore(new TypeMapFactory(), MapperRegistry.AllMappers());
		cfg.ConstructServicesUsing(@object.GetInstance);

		//bootstrap automapper, setup profile and so on
		Bootstrap.This(() => cfg);

		//configure automapper in container
		@object.Configure(_ => _.For<ConfigurationStore>().Singleton().Use(cfg));
		@object.Configure(_ => _.For<IMappingEngine>().Singleton().Use(new MappingEngine(cfg)));
	}
	#endregion
}

/// <summary>
/// Setup AutoMapper
/// </summary>
[ExportInstaller(typeof (IInstaller<ConfigurationStore>))]
public class SetupAutoMapperProfile : InstallerBase<ConfigurationStore>
{
	#region Overrides of InstallerBase<IConfiguration>

	/// <summary>
	/// </summary>
	/// <param name = "object"></param>
	protected override void Configure(ConfigurationStore @object)
	{
		@object.CreateMap<SimpleEntity, SimpleViewModel>()
			.ForMember(_ => _.FullName, _ => _.MapFrom(__ => string.Format("{0} {1}", __.FirstName, __.LastName)));
	}

	#endregion
}
=========================================================================================