Авторегистрация всех интерфейсов с Unity - PullRequest
18 голосов
/ 14 марта 2012

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

Мой вопрос:

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

Ответы [ 4 ]

13 голосов
/ 24 апреля 2015

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

public static void RegisterTypes(IUnityContainer container)
{
    container.RegisterTypes(
    AllClasses.FromLoadedAssemblies(),
    WithMappings.FromMatchingInterface,
    WithName.Default);
}
2 голосов
/ 15 марта 2012

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

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

1 голос
/ 30 октября 2015

Вы можете зарегистрироваться по соглашению ...

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

1 голос
/ 14 марта 2012

Unity не поддерживает соглашения. Но проект TecX на codeplex содержит усовершенствованный механизм конфигурации для Unity , основанный на конфигурации StructureMap.

...