将接口映射到具体类

本文关键字:接口 映射 | 更新日期: 2023-09-27 18:28:00

我已经编写了以下代码,并希望对其进行改进。使用Unity DI,我需要注册具体的类以及它们实现的接口。该方法的优点是不需要在添加时不断注册新类。

我已将代码缩减为

IUnityContainer-container=新的UnityContainer();//来自//工厂//集装箱。RegisterType();//服务//集装箱。RegisterType();//集装箱。RegisterType();//。。。。。。//至var assemblys=AppDomain.CurrentDomain.GetAssemblies()Where(x=>x.GetName().Name.Contains("Romabravo.ApplicationManager");foreach(程序集中的var程序集){var types=程序集。GetExportedTypes();foreach(在类型中键入t){var interfaces=t.GetInterface()。其中(x=>x.FullName!=null&&x.FullName.Contains("Romabravo.ApplicationManager").ToList();foreach(接口中的var项){var interfaceImplementers=AppDomain.CurrentDomain.GetAssemblies().SelectMany(s=>s.GetTypes())Where(p=>item.GetTypeInfo().IsAssignableFrom(p)&&项目FullName.Contains("Romabravo.ApplicationManager")。选择(x=>x)。其中(x=>!x.IsInterface&&!x.IsAbstract).ToList();if(interfaceImplementers!=null){foreach(interfaceImplementers中的var实现器){容器RegisterType(项,实现者);}}}}}退货集装箱;

只是在寻找进一步优化的方法。

将接口映射到具体类

如果您使用的是Unity 3,那么您可以按照惯例使用注册,这可以稍微简化代码:

container.RegisterTypes(
    AllClasses.FromLoadedAssemblies()
      .Where(a => a.FullName.Contains("Romabravo.ApplicationManager")),
    WithMappings.FromMatchingInterface);