используя UnityConfiguration - PullRequest
       1

используя UnityConfiguration

1 голос
/ 12 сентября 2011

Я использую UnityConfiguration с приложением MVC и пытаюсь зарегистрировать некоторые типы, используя код

container.Configure(a => a.Scan(b => b.Include(
              t => t.IsSubclassOf(typeof(ActionFilterAttribute)))));

Но, похоже, он не регистрируется по типам.Правда, я мог бы также использовать

GetType()
     .Assembly
     .GetTypes()
     .Where(t => t.IsSubclassOf(typeof(ActionFilterAttribute)))
     .ToList()
     .ForEach(r => container.RegisterType(r));

, но он не обладает такой же удобочитаемостью.

Возможно, я не понимаю, что должен делать метод "configure" (расширение).

Спасибо, Флорин

1 Ответ

2 голосов
/ 13 сентября 2011

Сканер используется, когда вы хотите автоматически регистрировать типы по соглашению, а не настраивать контейнер для каждого типа вручную.

Как минимум, при использовании сканера необходимо указать сборки, которые вы хотите сканировать, а также соглашение, которое вы хотите использовать:

container.Configure(c => c.Scan(scan =>
{
    scan.AssembliesInBaseDirectory();
    scan.With<FirstInterfaceConvention>();
    scan.Include(t => t.IsSubclassOf(typeof(ActionFilterAttribute)));
}));

Несколько вещей, о которых стоит упомянуть:

  1. Если встроенные соглашения вас не устраивают, вы можете создать свой собственный, просто создав класс, реализующий интерфейс IAssemblyScannerConvention, и заменить FirstInterfaceConvention в примере вашим типом.

  2. Используя scan.Include(...), вы неявно исключаете из регистрации все другие типы.

  3. Похоже, вы пытаетесь зарегистрировать конкретный класс (атрибут). Это не обязательно в Unity, так как он может разрешать конкретные классы без их предварительной регистрации.

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

- Томас

...