使用Unity自动注册所有接口

Dav*_*vid 18 .net c# inversion-of-control unity-container

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

INameOfObject > NameOfObject
Run Code Online (Sandbox Code Playgroud)

当启用默认约定时,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;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

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

aal*_*ajr 13

Unity 3.5.140.0内置了注册接口的功能,其名称与使用它的类相似.

public static void RegisterTypes(IUnityContainer container)
{
    container.RegisterTypes(
    AllClasses.FromLoadedAssemblies(),
    WithMappings.FromMatchingInterface,
    WithName.Default);
}
Run Code Online (Sandbox Code Playgroud)


小智 3

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

希望这可以帮助!