2017-12-04 04:08:05 +01:00
|
|
|
package mvc2
|
|
|
|
|
|
|
|
import (
|
2017-12-15 19:28:06 +01:00
|
|
|
"github.com/kataras/iris/mvc2/di"
|
2017-12-10 06:00:51 +01:00
|
|
|
"github.com/kataras/golog"
|
2017-12-14 22:04:42 +01:00
|
|
|
|
2017-12-04 04:08:05 +01:00
|
|
|
"github.com/kataras/iris/context"
|
|
|
|
"github.com/kataras/iris/core/router"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Engine struct {
|
2017-12-15 19:28:06 +01:00
|
|
|
Dependencies *di.D
|
2017-12-04 04:08:05 +01:00
|
|
|
}
|
|
|
|
|
2017-12-15 19:28:06 +01:00
|
|
|
func NewEngine() *Engine {
|
2017-12-14 22:04:42 +01:00
|
|
|
return &Engine{
|
2017-12-15 19:28:06 +01:00
|
|
|
Dependencies: di.New().Hijack(hijacker).GoodFunc(typeChecker),
|
2017-12-14 22:04:42 +01:00
|
|
|
}
|
2017-12-04 04:08:05 +01:00
|
|
|
}
|
|
|
|
|
2017-12-15 19:28:06 +01:00
|
|
|
func (e *Engine) Clone() *Engine {
|
|
|
|
child := NewEngine()
|
|
|
|
child.Dependencies = e.Dependencies.Clone()
|
2017-12-10 06:00:51 +01:00
|
|
|
return child
|
2017-12-04 04:08:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func (e *Engine) Handler(handler interface{}) context.Handler {
|
2017-12-15 19:28:06 +01:00
|
|
|
h, err := MakeHandler(handler, e.Dependencies.Values...)
|
2017-12-10 06:00:51 +01:00
|
|
|
if err != nil {
|
|
|
|
golog.Errorf("mvc handler: %v", err)
|
|
|
|
}
|
2017-12-04 04:08:05 +01:00
|
|
|
return h
|
|
|
|
}
|
|
|
|
|
2017-12-15 19:28:06 +01:00
|
|
|
func (e *Engine) Controller(router router.Party, controller interface{}, beforeActivate ...func(*ControllerActivator)) {
|
|
|
|
ca := newControllerActivator(router, controller, e.Dependencies)
|
2017-12-04 04:08:05 +01:00
|
|
|
|
2017-12-15 19:28:06 +01:00
|
|
|
// give a priority to the "beforeActivate"
|
2017-12-10 06:00:51 +01:00
|
|
|
// callbacks, if any.
|
2017-12-15 19:28:06 +01:00
|
|
|
for _, cb := range beforeActivate {
|
2017-12-10 06:00:51 +01:00
|
|
|
cb(ca)
|
2017-12-04 04:08:05 +01:00
|
|
|
}
|
2017-12-10 06:00:51 +01:00
|
|
|
|
2017-12-15 19:28:06 +01:00
|
|
|
// check if controller has an "BeforeActivate" function
|
2017-12-10 06:00:51 +01:00
|
|
|
// which accepts the controller activator and call it.
|
|
|
|
if activateListener, ok := controller.(interface {
|
2017-12-15 19:28:06 +01:00
|
|
|
BeforeActivate(*ControllerActivator)
|
2017-12-10 06:00:51 +01:00
|
|
|
}); ok {
|
2017-12-15 19:28:06 +01:00
|
|
|
activateListener.BeforeActivate(ca)
|
2017-12-10 06:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
ca.activate()
|
2017-12-04 04:08:05 +01:00
|
|
|
}
|