使用Unity自动注册所有接口

本文关键字:接口 注册 Unity 使用 | 更新日期: 2023-09-27 18:27:41

使用Unity,我想根据以下约定自动注册程序集中的所有接口/类组合:

INameOfObject > NameOfObject

StructureMap在启用默认约定时执行此操作。

我为它写了以下方法:

private static IUnityContainer RegisterITypesOf(this IUnityContainer container, string assemblyName)
{
  Assembly.Load(assemblyName)
    .GetTypes()
    .Where(t => t.GetInterfaces().Any(i => i.Name == "I" + t.Name))
    .ForEach(t => container.RegisterType(t.GetInterface("I" + t.Name, false), t));
  return container;
}

我的问题是:

  • 有没有一个内置的函数可以做同样的事情
  • 如果没有,我的代码是否可以在性能方面得到改进

使用Unity自动注册所有接口

Unity 3.5.140.0具有内置功能,可以注册与使用它的类名称相似的接口。

public static void RegisterTypes(IUnityContainer container)
{
    container.RegisterTypes(
    AllClasses.FromLoadedAssemblies(),
    WithMappings.FromMatchingInterface,
    WithName.Default);
}

我想要和你一样的东西;基于约定的配置ala Structuremap,并为其创建了一个库。您可以在NuGet上下载它,并在我的github页面上阅读一些文档

希望这能有所帮助!

Unity不支持约定。但codeplex上的TecX项目包含一个基于StructureMap配置的Unity增强配置引擎。

您可以按照约定注册。。。

https://msdn.microsoft.com/en-us/library/dn507479(v=pandp.30).aspx