我可以使用Unity容器注入路由吗?

时间:2015-11-03 21:23:56

标签: c# asp.net-mvc unity-container

我正在通过模块开发应用程序。每个模块都对应于我们公司的遗留系统。使用这样的代码,我可以使用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();
        }
    }
}

安装the Unity.Mvc bootstrapper时,此代码会自动添加到类库中。

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

像魅力一样工作,但我仍然需要从MVC应用程序中定义RouteConfig中的所有路由。我的挑战是在类库中定义这些路由。我还没有找到解释如何做的任何材料。

这可能吗?如果是,怎么样?

1 个答案:

答案 0 :(得分:0)

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

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

示例(使用UnityContainerExtension的答案): IoC in class library. Where to bootstrap