为ASP.NET MVC创建一个基于Unity的ControllerFactory
发布时间:2020-12-16 09:04:23 所属栏目:asp.Net 来源:网络整理
导读:谈到IoC和ASP.NET的集成,很多人会先后想到Ninject,不过我们个人还是倾向于Unity。这篇文章简单地介绍如果创建基于Unity的ControllerFactory。如下面的代码所示,我们通过直接继承DefaultControllerFactory创建一个自定的UnityControllerFactory。构造函数
谈到IoC和ASP.NET的集成,很多人会先后想到Ninject,不过我们个人还是倾向于Unity。这篇文章简单地介绍如果创建基于Unity的ControllerFactory。如下面的代码所示,我们通过直接继承DefaultControllerFactory创建一个自定的UnityControllerFactory。构造函数指定的是配置的UnityContainer的名称,如果没有显式指定则采用默认的UnityContainer。在重写的GetControllerInstance方法中,直接调用IUnityContainer的Resolve方法根据Controller类型创建相应的对象。[源代码从这里下载] 1: public class UnityControllerFactory: DefaultControllerFactory 3: public IUnityContainer Container { get; private set; } 5: { 7: UnityConfigurationSection configSection = ConfigurationManager.GetSection(UnityConfigurationSection.SectionName) as UnityConfigurationSection;
9: { 11: } 13: string.IsNullOrEmpty(containerName))
15: configSection.Configure(container); 17: else
19: configSection.Configure(container,containerName); 21: this.Container = container;
23: protected override IController GetControllerInstance(RequestContext requestContext,Type controllerType) 25: Guard.ArgumentNotNull(controllerType,"controllerType");
27: } string Name { get; set; } 我们在Web应用的主页显示联系人列表,为此我创建了如下一个HomeController。在这里我们演示的是构造器注入,所以我们通过构造函数指定的IContactRepository对象来初始化Repository属性。在Action方法Index中调用IContactRepository的GetAllContacts方法为对应的View指定Model。 public IContactRepository Repository { get; public HomeController(IContactRepository repository)
7: } 9: { 11: } 1: @model IEnumerable<Artech.Web.Mvc.Extensions.Contact> 3: ViewBag.Title = "Index"; 5:? div 9: ul 10: @foreach (var contact in this.Model) 12: lih3>@contact.Name 14: p>Gender: @contact.Gender 15: >Address: @contact.Address 16: hr /> 19: 20: > 自定义的UnityContainerFactory的注册定义在Gloable.asax中。初次之外,额外需要做的是忽略掉针对favicon.ico的路由,否则程序运行将会失败。 static void RegisterGlobalFilters(GlobalFilterCollection filters)
5: filters.Add(new HandleErrorAttribute());
void RegisterRoutes(RouteCollection routes) 11: routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
14: ); 16:? 18: { 20: RegisterGlobalFilters(GlobalFilters.Filters); 22:? 24: } unity 2: alias alias="IContactRepository" type="Artech.Web.Mvc.Extensions.IContactRepository,UnityIntegration" 3: ="DefaultContactRepository" ="Artech.Web.Mvc.Extensions.DefaultContactRepository,1)">/> 推荐文章
站长推荐
热点阅读
|