I am just wondering whether anyone had success with this (would also
appreciate any feedback – see code below).
I have a customised repository defined in:
Bla.Domain.Contracts.Repositories
Which is implemented in:
Bla.Tasks.Repositories
The customised repository is supposed to be constructor injected into
my wcf service:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single,
InstanceContextMode = InstanceContextMode.PerCall)]
public class Service : IService
{
private readonly IXYZRepository _repository;
public Service() : base() {}
public Service(IXYZRepository XYZRepository)
{
this._repository = XYZRepository;
}
...
This does not happen! I am a bit confused about what to do/use. There
are many wcf related s#arp contribs (the northwind example is not
console hosted). Castle also seems to have some wcf stuff.
This is my current console app main (very preliminary):
private static IWindsorContainer container;
static void Main(string[] args)
{
container = new WindsorContainer();
IoCInitializer test = new IoCInitializer(container);
Initializer.Init();
using (ServiceHost consoleHost = new ServiceHost(typeof(Service)))
{
consoleHost.Open();
Console.WriteLine("Press any key to stop the singleton service ...");
Console.ReadLine();
}
}
I include code for IoCInitializer and Initializer:
//
http://studentofallthings.blogspot.co.uk/2011/05/registering-sarp-architecture-contrib.html
public class IoCInitializer
{
public IoCInitializer() : this(new WindsorContainer()) { }
public IoCInitializer(IWindsorContainer container)
{
SharpArchContrib.Castle.CastleWindsor.ComponentRegistrar.AddComponentsTo(container);
AddGenericRepositoriesTo(container);
AddCustomRepositoriesTo(container);
ServiceLocator.SetLocatorProvider(() => new
WindsorServiceLocator(container));
}
private static void AddCustomRepositoriesTo(IWindsorContainer container)
{
container.Register(Classes.FromAssemblyNamed("Bla.Tasks")
.BasedOn<ICurrentRepository>()
//.LifestyleSingleton());
.LifestylePerThread());
}
private static void AddGenericRepositoriesTo(IWindsorContainer container)
{
container.Register(
Component.For(typeof(IEntityDuplicateChecker))
.ImplementedBy(typeof(EntityDuplicateChecker))
.Named("entityDuplicateChecker"));
container.Register(
Component.For(typeof(INHibernateRepository<>))
.ImplementedBy(typeof(NHibernateRepository<>))
.Named("nhibernateRepositoryType"));
container.Register(
Component.For(typeof(INHibernateRepositoryWithTypedId<,>))
.ImplementedBy(typeof(NHibernateRepositoryWithTypedId<,>))
.Named("nhibernateRepositoryWithTypedId"));
container.Register(
Component.For(typeof(ISessionFactoryKeyProvider))
.ImplementedBy(typeof(DefaultSessionFactoryKeyProvider))
.Named("sessionFactoryKeyProvider"));
}
}
public static class Initializer
{
public static void Init()
{
NHibernateSession.Init(new ThreadSessionStorage(),
new[] { "Bla.Domain.dll" },
new AutoPersistenceModelGenerator().Generate(),
"NHibernate.config");
}
}