Как зарегистрировать все сервисы одновременно, используя Unity.Mvc5 - PullRequest
0 голосов
/ 08 февраля 2019

, пожалуйста, помогите мне зарегистрировать все сервисы и репозитории сразу, используя Unity.Mvc5 .

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

Есть ли способ зарегистрировать все сервисы и репозиторий путем сканирования сборки (как предусмотрено StructureMap или Lamar) или что-то еще.

Заранее спасибо:).

DependencyResolver.SetResolver(new UnityDependencyResolver(container));
container.RegisterType<IAbcRepository, AbcRepository>();
container.RegisterType<IAbcService, AbcService>();

1 Ответ

0 голосов
/ 09 февраля 2019

Я нашел решение в вопросе здесь.приведенный ниже код работает, как и ожидалось.

Есть ли какой-либо недостаток этого и создаст ли в будущем проблему?или любой лучший способ зарегистрировать все репозитории и сервисы, кроме этого?

public static class UnityConfig
    {
        public static void RegisterComponents()
        {
            var container = new UnityContainer();

            DependencyResolver.SetResolver(new UnityDependencyResolver(container));
            // container.RegisterType<IAbcRepository, AbcRepository>();
            // container.RegisterType<IAbcService, AbcService>();

            container.RegisterTypes(AllClasses.FromAssemblies(typeof(Repository).Assembly), WithMappings.FromAllInterfaces, GetName, GetLifetimeManager);
            container.RegisterTypes(AllClasses.FromAssemblies(typeof(Service).Assembly), WithMappings.FromAllInterfaces, GetName, GetLifetimeManager);
        }


        static bool IsNotificationHandler(Type type)
        {
            return type.GetInterfaces().Any(x => x.IsGenericType);
        }

        static LifetimeManager GetLifetimeManager(Type type)
        {
            return IsNotificationHandler(type) ? new ContainerControlledLifetimeManager() : null;
        }

        static string GetName(Type type)
        {
            return IsNotificationHandler(type) ? string.Format("HandlerFor" + type.Name) : string.Empty;
        }
    }

Насколько это безопасно использовать в большом приложении?

...