Unity.AutoRegistration не автоматическая регистрация - PullRequest
2 голосов
/ 08 декабря 2011

Я пытаюсь использовать Unity.AutoRegistration для автоматического подключения моих интерфейсов к реализациям Моя конфигурация выглядит так:

public static class UnityConfigurator
{
    public static UnityContainer Configure()
    {
        var container = new UnityContainer();
        container.ConfigureAutoRegistration()     
                 .LoadAssemblyFrom(typeof(UnityConfigurator).Assembly.Location)
                 .LoadAssemblyFrom(typeof(ICountryFilterDataRepository).Assembly.Location)
                 .ExcludeSystemAssemblies()
                 .ExcludeAssemblies(a => a.GetName().FullName.Contains("Specs"))                     
                 .ApplyAutoRegistration();
        return container;
    }
}

Но это не работает :( Я получаю эту ошибку, которая явно подразумевает, что сопоставление не было установлено:

Текущий тип, Blah.IFoo, это интерфейс и не может быть построен. Вы пропустили тип отображение

Что не так с моим кодом конфигурации? Спасибо

Ответы [ 2 ]

2 голосов
/ 03 января 2012

Добавление этой строки должно решить проблему

.Include(If.ImplementsITypeName, Then.Register())
0 голосов
/ 09 декабря 2011

Может быть, вы хотите попробовать альтернативу Unity.AutoRegistration.

Проект TecX в CodePlex имеет порт механизма конфигурации StructureMap, включающий поддержку регистрации по соглашению. Конфигурация для Unity может быть найдена в TecX.Unity.Configuration. Есть UnitTests, которые показывают, как это используется.


UPDATE:

С TecX автоматическая регистрация IFoo будет выглядеть так:

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.Scan(
  x =>
  {
    x.AssembliesFromApplicationBaseDirectory();
    x.With(new ImplementsIInterfaceNameConvention());
  });
...