mirror of
https://github.com/kataras/iris.git
synced 2025-02-09 02:34:55 +01:00
67 lines
1.4 KiB
Go
67 lines
1.4 KiB
Go
package mvc2
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/kataras/di"
|
|
"github.com/kataras/golog"
|
|
|
|
"github.com/kataras/iris/context"
|
|
"github.com/kataras/iris/core/router"
|
|
)
|
|
|
|
var (
|
|
errNil = errors.New("nil")
|
|
errBad = errors.New("bad")
|
|
errAlreadyExists = errors.New("already exists")
|
|
)
|
|
|
|
type Engine struct {
|
|
dependencies *di.D
|
|
}
|
|
|
|
func New() *Engine {
|
|
return &Engine{
|
|
dependencies: di.New().Hijack(hijacker).GoodFunc(typeChecker),
|
|
}
|
|
}
|
|
|
|
func (e *Engine) Bind(values ...interface{}) *Engine {
|
|
e.dependencies.Bind(values...)
|
|
return e
|
|
}
|
|
|
|
func (e *Engine) Child() *Engine {
|
|
child := New()
|
|
child.dependencies = e.dependencies.Clone()
|
|
return child
|
|
}
|
|
|
|
func (e *Engine) Handler(handler interface{}) context.Handler {
|
|
h, err := MakeHandler(handler, e.dependencies.Values...)
|
|
if err != nil {
|
|
golog.Errorf("mvc handler: %v", err)
|
|
}
|
|
return h
|
|
}
|
|
|
|
func (e *Engine) Controller(router router.Party, controller interface{}, onActivate ...func(*ControllerActivator)) {
|
|
ca := newControllerActivator(router, controller, e.dependencies)
|
|
|
|
// give a priority to the "onActivate"
|
|
// callbacks, if any.
|
|
for _, cb := range onActivate {
|
|
cb(ca)
|
|
}
|
|
|
|
// check if controller has an "OnActivate" function
|
|
// which accepts the controller activator and call it.
|
|
if activateListener, ok := controller.(interface {
|
|
OnActivate(*ControllerActivator)
|
|
}); ok {
|
|
activateListener.OnActivate(ca)
|
|
}
|
|
|
|
ca.activate()
|
|
}
|