1

是否可以在StructureMap中註冊一種類型的TWO接口?看:在StructureMap中爲兩個接口註冊一種類型

public interface IUnitOfWork { } 

public interface IUnitOfWork<TSession> : IUnitOfWork { } 

public class NHibernateUnitOfWork : IUnitOfWork<ISession> { } 

我想爲這兩個IUnitOfWorkIUnitOfWork<TSession>例如註冊NHibernateUnitOfWork一個NHibernateUnitOfWork -per http請求的實例 - 負責IUnitOfWorkIUnitOfWork<TSession>。我使用這個註冊表:

For<IUnitOfWork>().HybridHttpOrThreadLocalScoped().Use<NHibernateUnitOfWork>(); 
For<IUnitOfWork<>>().HybridHttpOrThreadLocalScoped().Use<NHibernateUnitOfWork>(); 

但我不知道這是否正確?你能幫我嗎?

回答

0

查看註冊時,我希望容器在單個HTTP上下文中爲兩個註冊創建一個NHibernateUnitOfWork。換句話說,我希望下面的測試失敗:

var uow1 = container.GetInstance<IUnitOfWork>(); 
var uow2 = container.GetInstance<IUnitOfWork<ISession>>(); 
Assert.IsTrue(object.ReferenceEquals(uow1, uow2)); 

你可能後具有容器解決什麼都IUnitOfWorkIUnitOfWork<ISession>,這將使前面的測試過程,當returing相同的實例。

您可以將您的註冊更改爲以下:

For<NHibernateUnitOfWork>().HybridHttpOrThreadLocalScoped(); 
For<IUnitOfWork>().LifecycleIs(new UniquePerRequestLifeStyle()) 
    .Use(() => container.GetInstance<NHibernateUnitOfWork>()); 
For<IUnitOfWork<ISession>>().LifecycleIs(new UniquePerRequestLifeStyle()) 
    .Use(() => container.GetInstance<NHibernateUnitOfWork>()); 

在這種情況下,您每次請求的IUnitOfWork時候,你會打電話回容器中並請求NHibernateUnitOfWork,其配置爲HybridHttpOrThreadLocalScoped

相關問題