我可以使用Unity Container注入路由吗

本文关键字:注入 路由 Container Unity 可以使 我可以 | 更新日期: 2023-09-27 18:20:22

我正在按模块开发应用程序。每个模块都对应于我们公司的遗留系统。使用这样的代码,我可以使用Unity Container:将类库中的控制器注入MVC应用程序

using System.Linq;
using System.Web.Mvc;
using Microsoft.Practices.Unity.Mvc;
[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(MyProject.Common.UnityMvcActivator), "Start")]
[assembly: WebActivatorEx.ApplicationShutdownMethod(typeof(MyProject.Common.UnityMvcActivator), "Shutdown")]
namespace MyProject.Common
{
    public static class UnityMvcActivator
    {
        /// <summary>Integrates Unity when the application starts.</summary>
        public static void Start()
        {
            var container = UnityConfig.GetConfiguredContainer();
            FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First());
            FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container));
            DependencyResolver.SetResolver(new UnityDependencyResolver(container));
            // TODO: Uncomment if you want to use PerRequestLifetimeManager
            // Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
        }
        /// <summary>Disposes the Unity container when the application is shut down.</summary>
        public static void Shutdown()
        {
            var container = UnityConfig.GetConfiguredContainer();
            container.Dispose();
        }
    }
}

当我安装Unity.Mvc引导程序时,这些代码会自动添加到类库中。

所有实现为模块的类库都将面向web。

工作起来很有魅力,但我仍然需要从MVC应用程序定义RouteConfig中的所有路由。我的挑战是在类库中定义这些路由。我还没有找到任何说明该怎么做的材料。

这可能吗?如果是,如何?

我可以使用Unity Container注入路由吗

如果可能的话,我会重新设计。我建议将类库中的共享组件注入特定于应用程序的控制器中,但控制器和应用程序配置应该不在模块中。像这样的UI注意事项应该是特定于应用程序的。

至于容器,我建议每个程序集都有一个统一的配置,但不要在模块中引用容器(这样做是为了使容器成为服务定位器)。相反,在每个程序集中创建一个特定于模块的配置类,并在应用程序启动时将容器从UI应用程序传递到每个程序集的配置(您将依靠反射或类似方法来访问配置)。

示例(使用UnityContainerExtension的答案):类库中的IoC。引导的位置