代码之家  ›  专栏  ›  技术社区  ›  spinon

如何让structuremap基于类型生成实例

  •  0
  • spinon  · 技术社区  · 14 年前

    好吧,所以这可能不是最好的标题,但我正在挣扎如何标题这个。到目前为止,我掌握的情况如下:

    this.For<ICategoryMapper>()
        .Use<CategoryMapper>()
        .Named("CategoryMapper");
    

    但是现在我在从StructureMap以我可以使用的形式获取实例时遇到了一个问题。因为我不能用这样的代码正常请求它:

    ObjectFactory.GetNamedInstance<T>(namedInstance);
    

    任何输入到一个更好的方式来实现这一点或解决我的问题将是伟大的。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Joshua Flanagan    14 年前

    您是否需要使用命名实例,或者这仅仅是为了让它工作?

    一种方法是添加一个标记接口,声明映射程序使用的域类型。例如:

    public class PersonMapper : ICategoryMapper, ICategoryMapper<Person>{
    }
    

    在容器中注册映射器:

    ObjectFactory.Initialize(x =>
    {
        x.Scan(scan =>
        {
            scan.TheCallingAssembly();
            scan.ConnectImplementationsToTypesClosing(typeof (ICategoryMapper<>));
            scan.AddAllTypesOf<ICategoryMapper>();
        });
    });
    

    ObjectFactory.ForGenericType(typeof(ICategoryMapper<>))
      .WithParameters(typeof(Person))
      .GetInstanceAs<ICategoryMapper>();