如何在unity mvc框架 知乎中实现MVC模式

&&&&&&正文
在ASP.NET MVC中使用Unity进行依赖注入的三种方式
摘要:在ASP.NET MVC中使用Unity进行依赖注入的三种方式
在ASP.NET MVC4中,为了在解开Controller和Model的耦合,我们通常需要在Controller激活系统中引入IoC,用于处理用户请求的 Controller,让Controller依赖于ModelRepository的抽象而不是它的实现。我们可以在三个阶段使用IoC实现上面所说的解耦操作,首先需要简单介绍一下默认情况下Controller的激活过程:1、用户发送请求黑ASP.NET,路由系统对请求进行解析,根据注册的路由规则对请求进行匹配,解析出Controller和Action的名称等信息。2、将解析出的信息交给一个MvcRouteHandler对象进行处理,MvcHttpHandler中存在以个ControllerFactory成员,如果构造函数中没有提供一个实现IControllerFactory接口的对象,则默认构造函数通过调用ControllerBuilder.Current.GetControllerFactory()获取一个这样的对象。3、系统调用上文对象中德GetHttpHandler获得了一个实现了IHttpHandler接口的MvcHandler对象最终处理请求。4、在 MvcHandler中调用BeginProcessRequest方法继续处理请求,方法中从1中解析的信息中获得Controller和Action 的信息,而后利用2种的IControllerFactory对象激活Controller对象,并最终执行相应的Action。第一种方法由上文2种可知,我们可以创建自己的IControllerFactory对象实现依赖注入,然而我们可以通过直接继承 DefaultControllerFactory并重写GetControllerInstance方法来实现,这样可以免去重新实现其他一些功能的工作。以下是使用Unity创建的继承自DefaultControllerFactory的UnityControllerFactory的简单示例:namespace UnitySample{public class UnityControllerFactory:DefaultControllerFactory{private IUnityCpublic UnityControllerFactory(IUnityContainer container){this.container =}protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType){return null == controllerType ? null : (IController)this.container.Resolve(controllerType);//return base.GetControllerInstance(requestContext, controllerType);}}}我们可以在App_Start中使用ControllerBuilder设置系统使用这个ControllerFactoryIUnityContainer container = new UnityContainer();container.RegisterType();UnityControllerFactory factory = new UnityControllerFactory(container);ControllerBuilder.Current.SetControllerFactory(factory);第二种方法上文中继承的DefaultControllerFactory中,使用一个ControllerActivator的成员来实现对 Controller的激活,如果创建对象中没有提供一个IControllerActivator对象,则提供一个默认实现了 IControllerActivator的DefaultControllerActivator对象这个类型,这个接口中存在用于创建 Controller对象的Create方法,在DefaultControllerFactory中有存在一个 IControllerActivator类型的构造方法来制定它。所以我们可以使用一个自定义的实现自IControllerActivator借口的对象来进行依赖注入。namespace UnitySample{public class UnityControllerActivator:IControllerActivator{private IUnityCpublic UnityControllerActivator(IUnityContainer container){this.container =}public IController Create(RequestContext requestContext, Type controllerType){return controllerType == null ? null : (IController)container.RegisterType(controllerType);}}}修改方法1中在App_Start中的代码,使用这个ControllerActivator:IUnityContainer container = new UnityContainer();container.RegisterType();//UnityControllerFactory factory = new UnityControllerFactory(container);IControllerActivator controllerActivator = new UnityControllerActivator(container);DefaultControllerFactory defaultFactory = new DefaultControllerFactory(controllerActivator);ControllerBuilder.Current.SetControllerFactory(defaultFactory);第三种方法如同DefaultControllerFactory类中一样,在DefaultControllerActivator中也存在一个包含一个参数(类型为IDependencyResolver)的构造方法和一个没有参数的构造方法,默认情况下DefaultControlerFactory使用无参构造函数实例化一个DefaultControllerActivator对象,这种情况下提供一个默认的IDependencyResolver 对象。所以我们就同样可以使用一个自定义的IDependencyResolver类实现依赖注入。在IDependencyResolver接口中存在方法GetService和GetServices来对具体的类型进行解析namespace UnitySample{public class UnityDependencyResolver:IDependencyResolver{private IUnityCpublic UnityDependencyResolver(IUnityContainer container){this.container =}public object GetService(Type serviceType){return container.Resolve(serviceType);}public IEnumerable&object&GetServices(Type serviceType){return container.ResolveAll(serviceType);}}}修改App_Strat中的方法,使用这个自定义的DependencyResolver:IUnityContainer container=new UnityContainer();container.Register Type&IXXXRepository,XXXRepository&();UnityDependencyResolver resolver=new UnityDependencyResolver(container);DependencyResolver.SetResolver(resolver)
全国校区查询
新手入门点击榜
新手入门最新文章
官方新版意见收集
*您的积极反馈是我们前进的动力
官方新版意见收集
提交成功,感谢您的反馈。
我们会认真阅读和考虑每个用户的反馈。如何在Unity中实现MVC模式_百度知道
如何在Unity中实现MVC模式
提问者采纳
你知道什么是MVC吗?Model View Controller Model:数据 例如:本地数据 /联网数据/游戏资源等View:就是能看到那些Controller: 就是你如何利用整个资源做逻辑了。
其他类似问题
为您推荐:
mvc的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁如何在Unity中实现MVC模式_百度知道
如何在Unity中实现MVC模式
提问者采纳
  在Unity游戏的开发当中,我并没有刻意地采用MVC框架,因为不像网站开发那样,Model,View,Controller在游戏这个领域里还没有很清晰的定义。究其原因,可能是由于不同游戏类型本身的软件架构可以相差很远,而且游戏里面的Object之间有大量的交互,所以垂直的MVC似乎不是十分应景。然而,某种程度的分离代码逻辑是必要的,可以提高代码的可维护性和重用性。下面我说说自己的一些经验。假设我们在做一个马里奥:对于游戏里的角色,我会采用这样一个结构。Character Manager,它的作用是包含这个角色的Controller(s),并提供一个黑板(Blackboard)[1]。Controller,利用Reusable Models来处理角色在这个游戏中的某一状态的逻辑。Reusable Model,是一个虚的概念,并不是一个父类,通常这类Model都负责某一个特定的功能,可以重复利用,可看做游戏引擎的延伸。我会将Character Manager和Reusable Model继承MonoBehavior,这样我们就能够直观地知道这个角色是什么类型的Character,并且可以利用inspector调节Model的参数。
资深电脑人
其他类似问题
为您推荐:
mvc的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 unity mvc例子 的文章

 

随机推荐