IOC 自定义的ControllerFactory

新建一个类,名字为:MyControllerFactory

public class MyControllerFactory:IControllerFactory
{
    private static List<Type> controllerTypes = new List<Type>();

    static MyControllerFactory()
    {
        foreach (Assembly assembly in BuildManager.GetReferencedAssemblies())
        {
            foreach (Type type in assembly.GetTypes().Where(type => typeof(IController).IsAssignableFrom(type)))
            {
                controllerTypes.Add(type);
            }
        }
    }

    public IController CreateController(RequestContext requestContext, string controllerName)
    {
            string typename = controllerName + "Controller";
            Type controllerType = controllerTypes.FirstOrDefault(c=>string.Compare(typename,c.Name,true)==0);
            if(controllerType ==null)
            {
                return null;
            }
            return (IController)Activator.CreateInstance(controllerType);
    }

   public SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, string controllerName)
    {
        return SessionStateBehavior.Default;
    }

   public void ReleaseController(IController controller)
    {
        IDisposable disposable = controller as IDisposable;
        if (disposable != null)
        {
            disposable.Dispose();
        }
    }
}

}

第二步
Global.asax 文件里面添加两句话

 MyControllerFactory MyConFac = new MyControllerFactory();
 ControllerBuilder.Current.SetControllerFactory(MyConFac);

猜你喜欢

转载自blog.csdn.net/tangyanzhi1111/article/details/78913134
今日推荐