gpt4 book ai didi

structuremap - 在 StructureMap 中注册泛型接口(interface)的泛型实现

转载 作者:行者123 更新时间:2023-12-04 14:01:06 27 4
gpt4 key购买 nike

我有一个通用接口(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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com