作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个通用接口(interface)
public interface IDomainDataRepository<T>
{
T[] GetAll();
}
有一个通用的实现
public class DomainDataRepository<T> : IDomainDataRepository<T>
{
public virtual T[] GetAll()
{
return GetSession().Linq<T>().ToArray();
}
}
我如何在 StructureMap 中注册它,这样如果我请求 IDomainDataRepository<State>
然后它将新建一个 DomainDataRepository<State>
.此外,如果我决定实现 CountryDomainDataRepository
我要求 IDomainDataRepository<Country>
我想得到具体的实现。
public class CountryDomainDataRepository : IDomainDataRepository<State>
{
public virtual Country[] GetAll()
{
return GetSession().Linq<Country>().ToArray();
}
}
最佳答案
您可以通过将通用开放类型配置为使用具体开放类型来完成此操作:
[TestFixture]
public class open_generic_registration
{
[Test]
public void should_resolve_to_the_configured_concrete_instance_of_T()
{
var container = new Container(cfg =>
{
cfg.For(typeof (IDomainDataRepository<>)).Use(typeof (DomainDataRepository<>));
});
container.GetInstance<IDomainDataRepository<string>>().ShouldBeOfType<DomainDataRepository<string>>();
container.GetInstance<IDomainDataRepository<int>>().ShouldBeOfType<DomainDataRepository<int>>();
container.GetInstance<IDomainDataRepository<DateTime>>().ShouldBeOfType<DomainDataRepository<DateTime>>();
}
}
关于structuremap - 在 StructureMap 中注册泛型接口(interface)的泛型实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2233515/
我是一名优秀的程序员,十分优秀!