我使用以下命令:如何在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