我可以使用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
中的所有路由。我的挑战是在类库中定义这些路由。我还没有找到任何说明该怎么做的材料。
这可能吗?如果是,如何?
如果可能的话,我会重新设计。我建议将类库中的共享组件注入特定于应用程序的控制器中,但控制器和应用程序配置应该不在模块中。像这样的UI注意事项应该是特定于应用程序的。
至于容器,我建议每个程序集都有一个统一的配置,但不要在模块中引用容器(这样做是为了使容器成为服务定位器)。相反,在每个程序集中创建一个特定于模块的配置类,并在应用程序启动时将容器从UI应用程序传递到每个程序集的配置(您将依靠反射或类似方法来访问配置)。
示例(使用UnityContainerExtension
的答案):类库中的IoC。引导的位置