1

我已经编写了以下代码,我正在寻找改进它。使用 Unity DI,我需要注册具体的类以及它们实现的接口。该方法的优点是无需在添加新类时继续注册。

我已将代码减少到

    IUnityContainer 容器 = 新 UnityContainer();
            // 从
            // 工厂
            // container.RegisterType();

            // 服务
            // container.RegisterType();
            // container.RegisterType();
            //......
            // 至

    var 程序集 = AppDomain.CurrentDomain.GetAssemblies()
        .Where(x => x.GetName().Name.Contains("Romabravo.ApplicationManager"));

    foreach(程序集中的 var 程序集)
    {
        var types = assembly.GetExportedTypes();
        foreach(在类型中键入 t)
        {
            var interfaces = t.GetInterfaces().Where(x => x.FullName != null &&
            x.FullName.Contains("Romabravo.ApplicationManager")).ToList();

                foreach(接口中的变量项)
                {
                    var interfaceImplementers = AppDomain.CurrentDomain.GetAssemblies()
                    .SelectMany(s => s.GetTypes())
                    .Where(p => item.GetTypeInfo().IsAssignableFrom(p) &&
                    item.FullName.Contains("Romabravo.ApplicationManager"))
                    .Select(x => x).Where(x => !x.IsInterface && !x.IsAbstract).ToList();

                    if (interfaceImplementers != null)
                    {
                        foreach(interfaceImplementers 中的 var 实现者)
                        {
                            container.RegisterType(项目,实施者);
                        }
                    }
                }
            }
        }

    返回容器;


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

4

1 回答 1

2

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

container.RegisterTypes(
    AllClasses.FromLoadedAssemblies()
      .Where(a => a.FullName.Contains("Romabravo.ApplicationManager")),
    WithMappings.FromMatchingInterface);
于 2013-08-18T13:31:36.783 回答