aşağıdaki kullanın: threadlocal depolama ileNServicebus ileti işleyicisinde nasıl çoklu depoları enjekte edebilirim?
public interface IRepository<T>
{
void Add(T entity);
}
public class Repository<T>
{
private readonly ISession session;
public Repository(ISession session)
{
this.session = session;
}
public void Add(T entity)
{
session.Save(entity);
}
}
public class SomeHandler : IHandleMessages<SomeMessage>
{
private readonly IRepository<EntityA> aRepository;
private readonly IRepository<EntityB> bRepository;
public SomeHandler(IRepository<EntityA> aRepository, IRepository<EntityB> bRepository)
{
this.aRepository = aRepository;
this.bRepository = bRepository;
}
public void Handle(SomeMessage message)
{
aRepository.Add(new A(message.Property);
bRepository.Add(new B(message.Property);
}
}
public class MessageEndPoint : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
public void Init()
{
ObjectFactory.Configure(config =>
{
config.For<ISession>()
.CacheBy(InstanceScope.ThreadLocal)
.TheDefault.Is.ConstructedBy(ctx => ctx.GetInstance<ISessionFactory>().OpenSession());
config.ForRequestedType(typeof(IRepository<>))
.TheDefaultIsConcreteType(typeof(Repository<>));
}
}
Benim sorundur, aynı oturum bütün uygulama parçacığı sırasında kullanılan olmasıdır. İlk seviye önbelleğin temizlenmediğini gördüğümde bunu keşfettim. İstediğim, IHandleMessages <> .Handle'ye yapılan her aramadan önce yeni bir oturum örneği kullanıyor. Bunu structuremap ile nasıl yapabilirim? Mesaj modülü oluşturmalı mıyım?
Oturumun açılışını yapmak için bir messagemodule kullanıyor musunuz? –
Şu anda, yalnızca oturumu çözmek için structuremap kullanıyorum. Zorunda mıyım? – Paco
Aynı seanstaki tüm talepler için aynı seans kullanılır. Bunun nedeni, NSB'nin her istek için yeni ileti dizileri oluşturmamasıdır. Şu anda bir geçici çözümüm yok, bunu biraz daha düşünmeliyim. –