Dependency injection 在StructureMap中为两个接口注册一种类型

Dependency injection 在StructureMap中为两个接口注册一种类型,dependency-injection,inversion-of-control,structuremap,Dependency Injection,Inversion Of Control,Structuremap,是否可以在StructureMap中为两个接口注册一种类型?看: public interface IUnitOfWork { } public interface IUnitOfWork<TSession> : IUnitOfWork { } public class NHibernateUnitOfWork : IUnitOfWork<ISession> { } 但我不知道这是不是电流?您能帮助我吗?查看该注册时,我希望容器在单个HTTP上下文中为两个注册创建一

是否可以在StructureMap中为两个接口注册一种类型?看:

public interface IUnitOfWork { }

public interface IUnitOfWork<TSession> : IUnitOfWork { }

public class NHibernateUnitOfWork : IUnitOfWork<ISession> { }

但我不知道这是不是电流?您能帮助我吗?

查看该注册时,我希望容器在单个HTTP上下文中为两个注册创建一个
nhibernateunofwork
。换句话说,我预计以下测试会失败:

var uow1=container.GetInstance();
var uow2=container.GetInstance();
Assert.IsTrue(object.ReferenceEquals(uow1,uow2));
您可能想让容器在解析
IUnitOfWork
IUnitOfWork
时返回同一实例,这将使上一个测试通过

您可以将注册更改为以下内容:

For().HybridHttpOrthReadLocalScope();
For().LifecycleIs(新的UniquePerRequestLifeStyle())
.Use(()=>container.GetInstance());
For().LifecycleIs(新的UniquePerRequestLifeStyle())
.Use(()=>container.GetInstance());

在这种情况下,每次请求一个
IUnitOfWork
,您都会回叫到容器中,请求一个
nhibernateunUnitOfWork
,它被配置为
hybridhttpOrthReadLocalScope

请参阅Forward命令,如下面的回答所示:

如果你不想要单身,你只需要改变生命周期

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