سفارشی کردن Controller factory توکار و فرصتی برای تزریق وابستگیها به کنترلر
نویسنده: کیانی مقدم علیرضا
تاریخ: ۱۳۹۴/۰۸/۱۵ ۱۱:۴۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing;
using ControllerExtensibility.Infrastructure;
namespace ControllerExtensibility
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
ControllerBuilder.Current.DefaultNamespaces.Add("MyControllerNamespace");
ControllerBuilder.Current.DefaultNamespaces.Add("MyProject.*");
}
}
} namespace System.Web.Mvc
{
using System.Web.Routing;
public interface IControllerActivator
{
IController Create(RequestContext requestContext, Type controllerType);
}
} using ControllerExtensibility.Controllers;
using System;
using System.Web.Mvc;
using System.Web.Routing;
namespace ControllerExtensibility.Infrastructure
{
public class StructureMapControllerActivator : IControllerActivator
{
public IController Create(RequestContext requestContext,
Type controllerType)
{
return (IController)ObjectFactory.GetInstance(controllerType);
}
}
} using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing;
using ControllerExtensibility.Infrastructure;
namespace ControllerExtensibility
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
ControllerBuilder.Current.SetControllerFactory(new
DefaultControllerFactory(new StructureMapControllerActivator()));
}
}
} | متد | نوع بازگشتی | توضیحات |
| CreateController | IController | پیاده سازی کنندهی متد Createontroller از اینترفیس IControllerFactory است و به صورت پیش فرض متد GetControllerType را جهت تعیین نوعی که باید وهله سازی شود، صدا میزند و سپس کنترلر وهله سازی شده را به متد GetControllerInstance ارسال میکند. |
| GetControllerType | Type | وظیفهی نگاشت درخواست رسیده را به Controller type عهده دار است. |
| GetControllerInstance | IController | وظیفه ایجاد وهلهای از نوع مشخص شده را عهده دار است. |
public class StructureMapControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return ObjectFactory.GetInstance(controllerType) as Controller;
}
} ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());