Unity RegisterTypes与程序集通配符

g.t*_*w.d 0 .net c# unity-container

调用container.RegisterTypes时是否可以使用程序集通配符?

即如果我只想从以Foo.Bar开头的Assemblies中注册类,有没有办法做到这一点.所以如果我有Foo.Bar.Test1然后是Foo.Bar.Test2程序集,它会抓住这两个而不必明确引用这些名称?

ven*_*mit 7

是的,你可以这样做.请参阅以下代码以在给定命名空间中注册程序集中的类型:

var container = new UnityContainer();

container.AddNewExtension<Interception>();
container.RegisterTypes(
    AllClasses.FromLoadedAssemblies().Where(
      t => t.Namespace == "Foo.Bar"),
    WithMappings.MatchingInterface,
    WithName.Default);
Run Code Online (Sandbox Code Playgroud)

检查是否所有类型都在特定命名空间下从该程序集注册:

Console.WriteLine("Container has {0} Registrations:",
  container.Registrations.Count());
foreach (ContainerRegistration item in container.Registrations)
{
  Console.WriteLine(item.GetMappingAsString());
}
Run Code Online (Sandbox Code Playgroud)