Авто-регистрация всех интерфейсов с Unity - программирование
Подтвердить что ты не робот

Авто-регистрация всех интерфейсов с Unity

Используя 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;
}

Мой вопрос:

  • Есть ли встроенная функция, которая делает то же самое?
  • Если нет, может ли мой код улучшить производительность?
4b9b3361

Ответ 1

Я хотел того же, что и ты; основанную на согласии конфигурацию ala Structuremap, и пошел вперед и создал для нее библиотеку. Вы можете загрузить его на NuGet и прочитать некоторую документацию по github страница

Надеюсь, это поможет!

Ответ 2

Unity 3.5.140.0 имеет встроенные функции для регистрации интерфейсов с похожими именами, такими как класс, который его использует.

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