我使用以下命令:如何在NServicebus消息處理程序中注入多個存儲庫?
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<>));
}
}
我與ThreadLocal的存儲問題,是整個應用程序線程在同一會話使用。當我看到第一級緩存未被清除時,我發現了這一點。我想要的是在每次調用IHandleMessages> .Handle之前使用新的會話實例。 我該如何使用結構圖來做到這一點?我必須創建一個消息模塊嗎?
您是否使用messagemodule來處理會話的打開? – 2010-03-24 17:58:00
目前沒有,我只是使用結構圖解析會話。我一定要嗎? – Paco 2010-03-24 17:59:21
你是對的,同一個會話用於對同一個線程的所有請求。這是因爲NSB不會爲每個請求創建新線程。我現在沒有解決方法,需要多考慮一下。 – 2010-03-24 19:09:35