我使用Entity Framework 6在.NET MVC5中有一个标准的类堆栈:
MyController()
MyService() : ServiceBase()
ServiceBase() : IServiceBase
目前所有方法/类都是公开的。
ServiceBase()
包含通用(T)方法,并由所有服务继承。
问题是MyController()
可以直接调用ServiceBase()
中的泛型方法。在传递给ServiceBase()
之前,需要在实体上设置重要属性。
有没有办法隐藏ServiceBase()
方法MyController()
迫使MyController()
通过MyService()
而不是直接调用ServiceBase()
方法?
谢谢大家。
答案 0 :(得分:1)
为什么要从界面开始?我觉得你的OO有点困惑。我认为你遇到的问题是你从界面开始,它没有方法可见性控制。因此,您尝试在ServiceBase中隐藏它,但MyService必须知道接口,这就是为什么您无法在中途更改可见性。
我建议你重新考虑你的OO策略。
但是,如果您真的想要保留接口并隐藏基类中的方法,可以在MyService中将它们删除,并在MyService的另一个方法内部直接调用基类。我创建了一个示例here。
但就像我说的那样,我会劝阻这种行为,并提出更好的OO策略。如果您可以在单独的问题中发布您的代码,那么我和社区的其他成员可以帮助您解决问题。仅供参考,这可能会在codereview stackexchange站点中变得更好。
答案 1 :(得分:0)
答案是使我不希望控制器直接访问的基类继续包含方法实现。
使用受保护的构造函数使ServiceBase类变得抽象。然后,只有从它们派生的类才能直接访问它们的方法,强制控制器调用控制器服务,然后调用基本服务类。