দ্বারা প্রতিটি অনুরোধের জন্য একটি কন্ট্রোলার তৈরি করা হয় ControllerFactory
(যা ডিফল্টরূপে এটি হয় DefaultControllerFactory
)।
http://msdn.microsoft.com/en-us/library/system.web.mvc.defaultcontrollerfactory.aspx
মনে রাখবেন যে Html.Action
এইচটিএমএল সহায়ক অন্য একটি নিয়ামক তৈরি করবে।
সংক্ষিপ্ত সংস্করণটিকে ControllerActivator.Create
বলা হয় (প্রতিটি অনুরোধের জন্য) একটি কন্ট্রোলার তৈরি করতে (যা কোনও নতুন কন্ট্রোলারকে ডিপেন্ডেন্সি রিসোলভারের মাধ্যমে বা অ্যাক্টিভেটরের মাধ্যমে কোনও রেজলভার সেটআপ না করা থাকলে) তৈরি করে:
public IController Create(RequestContext requestContext, Type controllerType)
{
try
{
return (IController)(_resolverThunk().GetService(controllerType) ?? Activator.CreateInstance(controllerType));
}
লম্বা সংস্করণটি হ'ল (এমভিসিহ্যান্ডলার থেকে উত্স থেকে কোডটি এখানে):
protected internal virtual void ProcessRequest(HttpContextBase httpContext)
{
SecurityUtil.ProcessInApplicationTrust(() =>
{
IController controller;
IControllerFactory factory;
ProcessRequestInit(httpContext, out controller, out factory);
try
{
controller.Execute(RequestContext);
}
finally
{
factory.ReleaseController(controller);
}
});
}
private void ProcessRequestInit(HttpContextBase httpContext, out IController controller, out IControllerFactory factory)
{
// non-relevant code
// Instantiate the controller and call Execute
factory = ControllerBuilder.GetControllerFactory();
controller = factory.CreateController(RequestContext, controllerName);
if (controller == null)
{
throw new InvalidOperationException(
String.Format(
CultureInfo.CurrentCulture,
MvcResources.ControllerBuilder_FactoryReturnedNull,
factory.GetType(),
controllerName));
}
}
কন্ট্রোলার কারখানার কোডটি এখানে:
public virtual IController CreateController(RequestContext requestContext, string controllerName)
{
Type controllerType = GetControllerType(requestContext, controllerName);
IController controller = GetControllerInstance(requestContext, controllerType);
return controller;
}
যা মূলত এটি বলে:
protected internal virtual IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return ControllerActivator.Create(requestContext, controllerType);
}
যা এই পদ্ধতিতে কল করে ControllerActivator
(এই কোডটি নির্ভরতার জন্য রিসোলভারকে উদাহরণস্বরূপ জিজ্ঞাসা করার চেষ্টা করে, বা কেবল অ্যাক্টিভেটর শ্রেণি ব্যবহার করে):
public IController Create(RequestContext requestContext, Type controllerType)
{
try
{
return (IController)(_resolverThunk().GetService(controllerType) ?? Activator.CreateInstance(controllerType));
}
এটি খুব বেশি তথ্যের আওতায় পড়তে পারে ... তবে আমি এটি দেখাতে চেয়েছিলাম যে আপনি প্রতিটি অনুরোধের জন্য সত্যই একটি নতুন নিয়ামক পান।