From 12ef034ea1a1f2335aa23d235549b0394f921dd3 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Fri, 22 Dec 2017 11:07:13 +0200 Subject: [PATCH] add some comment docs at the mvc/controller.go Former-commit-id: 6ff3c8694c3e581c3e28fc706bddbc6759492280 --- mvc/controller.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/mvc/controller.go b/mvc/controller.go index 78ec9c61..1c44b97b 100644 --- a/mvc/controller.go +++ b/mvc/controller.go @@ -27,11 +27,27 @@ type shared interface { Handle(httpMethod, path, funcName string, middleware ...context.Handler) *router.Route } +// BeforeActivation is being used as the onle one input argument of a +// `func(c *Controller) BeforeActivation(b mvc.BeforeActivation) {}`. +// +// It's being called before the controller's dependencies binding to the fields or the input arguments +// but before server ran. +// +// It's being used to customize a controller if needed inside the controller itself, +// it's called once per application. type BeforeActivation interface { shared Dependencies() *di.Values } +// AfterActivation is being used as the onle one input argument of a +// `func(c *Controller) AfterActivation(a mvc.AfterActivation) {}`. +// +// It's being called after the `BeforeActivation`, +// and after controller's dependencies binded to the fields or the input arguments but before server ran. +// +// It's being used to customize a controller if needed inside the controller itself, +// it's called once per application. type AfterActivation interface { shared DependenciesReadOnly() ValuesReadOnly @@ -70,6 +86,8 @@ type ControllerActivator struct { injector *di.StructInjector } +// NameOf returns the package name + the struct type's name, +// it's used to take the full name of an Controller, the `ControllerActivator#Name`. func NameOf(v interface{}) string { elemTyp := di.IndirectType(di.ValueOf(v).Type()) @@ -117,10 +135,15 @@ func whatReservedMethods(typ reflect.Type) []string { return methods } +// Dependencies returns the write and read access of the dependencies that are +// came from the parent MVC Application, with this you can customize +// the dependencies per controller, used at the `BeforeActivation`. func (c *ControllerActivator) Dependencies() *di.Values { return &c.dependencies } +// ValuesReadOnly returns the read-only access type of the controller's dependencies. +// Used at `AfterActivation`. type ValuesReadOnly interface { // Has returns true if a binder responsible to // bind and return a type of "typ" is already registered to this controller. @@ -134,14 +157,26 @@ type ValuesReadOnly interface { CloneWithFieldsOf(s interface{}) di.Values } +// DependenciesReadOnly returns the read-only access type of the controller's dependencies. +// Used at `AfterActivation`. func (c *ControllerActivator) DependenciesReadOnly() ValuesReadOnly { return c.dependencies } +// Name returns the full name of the controller, its package name + the type name. +// Can used at both `BeforeActivation` and `AfterActivation`. func (c *ControllerActivator) Name() string { return c.fullName } +// Router is the standard Iris router's public API. +// With this you can register middleware, view layouts, subdomains, serve static files +// and even add custom standard iris handlers as normally. +// +// This Router is the router instance that came from the parent MVC Application, +// it's the `app.Party(...)` argument. +// +// Can used at both `BeforeActivation` and `AfterActivation`. func (c *ControllerActivator) Router() router.Party { return c.router }