Taylohtio/GeneralApi/GeneralApi.Core/Infrastructure/IoC/IoCConfiguration.cs

123 lines
5.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GeneralApi.Core.Common;
using GeneralApi.Core.Infrastructure.DataAccess;
using GeneralApi.Core.Repositories;
using GeneralApi.Core.Repositories.Impl;
using GeneralApi.Core.Services;
using Microsoft.Practices.ServiceLocation;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Validator.Engine;
using StructureMap;
using StructureMap.Attributes;
using StructureMap.ServiceLocatorAdapter;
using Taloyhtio.GeneralApi.Core.Entities;
using Taloyhtio.GeneralApi.Core.Services;
using Taloyhtio.GeneralApi.Core.Services.Impl;
namespace GeneralApi.Core.Infrastructure.IoC
{
public class IoCConfiguration
{
public static void Configure()
{
// var containerBulder = new ContainerBuilder();
//
// containerBulder.RegisterType<Logger>()
// .As<ILogger>()
// .SingleInstance();
//
// containerBulder.Register(
// ctx => NHValidatorConfiguration.Configure())
// .As<ValidatorEngine>()
// .SingleInstance();
//
// containerBulder.Register(
// ctx => NHConfiguration.Configure())
// .As<Configuration>()
// .SingleInstance();
//
// containerBulder.Register(
// ctx => ctx.Resolve<Configuration>().BuildSessionFactory())
// .As<ISessionFactory>()
// .SingleInstance();
//
// containerBulder.Register(
// ctx => ctx.Resolve<ISessionFactory>().OpenSession())
// .As<ISession>();
//
// containerBulder.RegisterType<SessionSource>()
// .As<ISessionSource>()
// .SingleInstance();
//
// containerBulder.RegisterType<UnitOfWork>()
// .As<IUnitOfWork>()
// .InstancePerHttpRequest();
//
// containerBulder.RegisterType<CondoRepository>()
// .As<ICondoRepository>();
ObjectFactory.Initialize(
x =>
{
x.ForRequestedType<ILogger>()
.TheDefaultIsConcreteType<Logger>()
.AsSingletons();
x.ForRequestedType<ValidatorEngine>().AsSingletons()
.TheDefault.Is.ConstructedBy(ctx => NHValidatorConfiguration.Configure());
x.ForRequestedType<Configuration>().AsSingletons()
.TheDefault.Is.ConstructedBy(ctx => NHConfiguration.Configure());
x.ForRequestedType<ISessionFactory>().AsSingletons()
.TheDefault.Is.ConstructedBy(ctx => ctx.GetInstance<Configuration>().BuildSessionFactory());
x.ForRequestedType<ISession>().AsSingletons()
.TheDefault.Is.ConstructedBy(ctx => ctx.GetInstance<ISessionFactory>().OpenSession());
x.ForRequestedType<ISessionSource>()
.TheDefaultIsConcreteType<SessionSource>()
.AsSingletons();
x.ForRequestedType<IUnitOfWork>()
.TheDefaultIsConcreteType<UnitOfWork>()
.CacheBy(InstanceScope.Hybrid);
x.ForRequestedType<ICondoRepository>()
.TheDefaultIsConcreteType<CondoRepository>();
x.ForRequestedType<IBoardMemberRepository>()
.TheDefaultIsConcreteType<BoardMemberRepository>();
x.ForRequestedType<IMapper<Taloyhtio.GeneralApi.Common.DTO.Condo, Condo>>()
.TheDefaultIsConcreteType<Mapper<Taloyhtio.GeneralApi.Common.DTO.Condo, Condo>>();
x.ForRequestedType<IMapper<Taloyhtio.GeneralApi.Common.DTO.BoardMember, BoardMember>>()
.TheDefaultIsConcreteType<Mapper<Taloyhtio.GeneralApi.Common.DTO.BoardMember, BoardMember>>();
x.ForRequestedType<IConverter>()
.TheDefaultIsConcreteType<Converter>();
x.ForRequestedType<IEmailService>()
.TheDefaultIsConcreteType<EmailService>();
x.ForRequestedType<ISettingsProvider>()
.TheDefaultIsConcreteType<SettingsProvider>();
x.ForRequestedType<ITemplateEngine>()
.TheDefaultIsConcreteType<TemplateEngine>();
// x.ForRequestedType<IPropertyExtractor>()
// .TheDefaultIsConcreteType<PropertyExtractor>();
});
var locator = new StructureMapServiceLocator(ObjectFactory.Container);
ServiceLocator.SetLocatorProvider(() => locator);
}
}
}