Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 强制.NETMVC控制器调用服务方法,而不是直接调用基类_Asp.net Mvc_Inheritance_Controller_Base Class_Service Layer - Fatal编程技术网

Asp.net mvc 强制.NETMVC控制器调用服务方法,而不是直接调用基类

Asp.net mvc 强制.NETMVC控制器调用服务方法,而不是直接调用基类,asp.net-mvc,inheritance,controller,base-class,service-layer,Asp.net Mvc,Inheritance,Controller,Base Class,Service Layer,我在使用Entity Framework 6的.NET MVC5中有一个标准类堆栈: MyController() MyService() : ServiceBase() ServiceBase() : IServiceBase 目前所有方法/类都是公共的 ServiceBase()包含泛型(T)方法,并由所有服务继承 问题在于MyController()可以直接调用ServiceBase()中的泛型方法。在传递到ServiceBase()之前,需要在实体上设置重要属性 有没有办法隐藏Serv

我在使用Entity Framework 6的.NET MVC5中有一个标准类堆栈:

MyController()
MyService() : ServiceBase()
ServiceBase() : IServiceBase
目前所有方法/类都是公共的

ServiceBase()
包含泛型(T)方法,并由所有服务继承

问题在于
MyController()
可以直接调用
ServiceBase()
中的泛型方法。在传递到
ServiceBase()
之前,需要在实体上设置重要属性

有没有办法隐藏
ServiceBase()
方法,使
MyController()
强制
MyController()
通过
MyService()
而不是直接调用
ServiceBase()
方法


谢谢大家。

为什么要从界面开始?我想你的OO有点困惑了。我认为您遇到的问题是,您从一个没有方法可见性控件的接口开始。因此,您试图将其隐藏在ServiceBase中,但MyService必须了解接口,因此您不能中途更改可见性

我建议您重新考虑一下OO策略

但是,如果您真的想保留接口并在基类中隐藏方法,可以在MyService中将它们清空,在MyService的另一个方法中可以直接调用基类。我创造了一个例子


但正如我所说,我会阻止这种行为,并提出更好的OO策略。如果你能抽出时间发布你的代码,也许是在一个单独的问题中,那么我和社区的其他人可以帮你解决这个问题。仅供参考,这在stackexchange站点中可能会更好。

答案是将我不希望控制器直接访问的基类抽象,同时继续包含方法实现

使用受保护的构造函数抽象ServiceBase类。然后,只有从它们派生的类才能直接访问它们的方法,迫使控制器调用控制器服务,然后调用基本服务类


有什么原因不能使这些方法受保护吗?当我使它们受保护时,我得到一个错误,说非公共方法UpdateEntity()无法从接口IServiceBase实现方法。在接口定义上没有设置访问器。发布三个类的代码。