使用StructureMap 2.6.4.1(不,我还没有升级;很快),我试图做这样的事情:
Scan(scan => scan.AddAllTypesOf<IMap>()
.NameBy(t =>
{
if (t.Namespace.IsNullOrWhiteSpace()) return null;
if (t.Namespace.Contains("Foo")) return "Foo";
if (t.Namespace.Contains("Bar")) return "Bar";
return null;
}));
然后是:
container.GetAllInstances<IMap>("Bar"); // doesn't compile
我的第一个问题是:StructureMap是否每个名称只有一个具体的注册?
我能想到解决这个问题的唯一方法是做这样的事情:
For<IEnumerable<IMap>>().Add(c =>
{
var maps = c.GetAllInstances<IMap>();
var filteredMaps = maps
.Where(m => m.GetType().Namespace.Contains("Bar"))
.ToList();
return filteredMaps;
})
.Named("Bar");
有更好的方法吗?