0

好,所以这可能不是最好的标题,但我正在努力如何标题。这是我到目前为止:如何让基于类型的结构图构建实例

我目前有我的对象的数据映射器。我在类似的注册表中定义它们。这允许我获取对象的类型名称并将其与Mapper这个词结合起来并请求它。这里是我使用的代码:

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

但现在我有正从StructureMap实例中,我可以用一个形式的问题。因为我不能像正常的代码是这样要求的:

ObjectFactory.GetNamedInstance<T>(namedInstance); 

原因是,我真的不知道类型。我只知道它应该是DomainType名称和单词映射器。有可能有更好的方法来实现这一点,但我在迷失在做什么。

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

回答

2

您是否需要使用命名实例,或者只是试图让它起作用?

您可以做的一种方法是添加一个标记接口,该接口声明映射器使用的DomainType。例如:

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

注册映射器与容器:

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

然后你可以检索映射为你一个DomainType(人为例):

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

+1是使用命名实例只是一种可以让它工作的方式。我最终创建了一个非通用接口并分配给基类。然后用它来定义所有类型。这里是我做的: this.For ()。使用()。Named(“CategoryMapper”); 虽然你在这里看起来更好,并且消除了每次创建新映射器时都必须添加新条目。我今晚肯定会试试这个,看看这样做是否会做我所需要的。 – spinon 2010-09-14 04:36:03