我有以下在 2.6.4 版本中工作的 StructureMap 注册,我终于升级到最新的 SM(撰写本文时为 3.1.2)。并且需要更新它,因为似乎不再有 IContext.BuildStack 了。
这是 2.6.4 的旧工作版本:
initialization.For(typeof(IRepository<,>))
.Use(context =>
{
var genericArgs = context.BuildStack.Current.RequestedType.GetGenericArguments();
return RepositoryFactory.GetInstance(genericArgs[0], genericArgs[1], repositoryName);
}
);
所以我认为将其更改为这样会起作用:
initialization.For(typeof (IRepository<,>))
.Use("IRepository<,>", context =>
{
var genericArgs = context.ParentType.GetGenericArguments();
return RepositoryFactory.GetInstance(genericArgs[0], genericArgs[1],
repositoryName);
}
);
但 context.ParentType 为空。当我查看 context.RootType 它设置为 System.Object 这显然不是我想要的。
我获取此存储库实例的测试代码是:
var userRepository = ObjectFactory.GetInstance<IRepository<User, Guid>>();
我没有看到任何其他具有此信息的属性,但我猜我错过了一些东西。