0

请帮助我使用Unity.Mvc5一次注册所有服务和存储库。

我现在正在使用以下场景。但在此我必须将每个服务和存储库注册到统一容器。

有没有办法通过扫描程序集(如 StructureMap 或 Lamar 提供的)或其他方式来注册所有服务和存储库。

提前致谢 :)。

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

1 回答 1

0

我在这里的一个问题中找到了解决方案。下面的代码按预期工作。

这有什么缺点,将来会产生任何问题吗?或任何注册所有存储库和服务的最佳方式,除了这个?

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;
        }
    }

在大型应用程序中使用多少安全?

于 2019-02-09T06:51:54.467 回答