use IContext to replace *Context