如何防止构造函数在c#类中的滥用

如何防止构造函数在c#类中的滥用,第1张

概述我一直试图在一个asp.net MVC5应用程序中实现一个松散耦合的应用程序.我有一个控制器: public class HeaderController : Controller { private IMenuService _menuService; public HeaderController(IMenuService menuService) 我一直试图在一个asp.net MVC5应用程序中实现一个松散耦合的应用程序.我有一个控制器:
public class headerController : Controller    {        private IMenuService _menuService;        public headerController(IMenuService menuService)        {            this._menuService = menuService;        }        //        // GET: /header/        public ActionResult Index()        {            return VIEw();        }        public ActionResult GetMenu()        {            MenuItem menu = this._menuService.GetMenu();            return VIEw("Menu",menu);        }    }

此控制器使用的服务是:

public class MenuService : IMenuService{    private IMenuRespository _menuRepository;    public MenuService(IMenuRespository menuRepository)    {        this._menuRepository = menuRepository;    }    public MenuItem GetMenu()    {        return this._menuRepository.GetMenu();    }}

而在服务类中使用的存储库是:

public class MenuRepository : IMenuRespository    {        public MenuItem GetMenu()        {            //return the menu items        }    }

用于服务和存储库的接口是这样的:

public interface IMenuService    {        MenuItem GetMenu();    }public interface IMenuRespository    {        MenuItem GetMenu();    }

headerController的构造函数使用构造函数注入进行MenuService,我将ninject作为处理这个的DI容器.

这一切都很好 – 除了在我的控制器中,我仍然可以做到这一点:

MenuItem menu = new MenuService(new MenuRepository());

…打破了建筑.如何以这种方式阻止“新”的使用?

解决方法 执行此 *** 作的一种方法是将您的接口和实现移动到单独的Visual Studio项目/程序集中,并且仅引用实际需要的项目中的实现项目 – 其他所有内容都可以引用IMenuService的接口项目指向代码可以消耗接口,但实际上并不会增加任何实现本身.

然后您可以在依赖关系中的任何地方引用实施项目.

WebApp Solution:

WebApp Proj (Controllers etc.) –> Service Interface Proj

Service Impl Project –> Service Interface Proj

即使这样,这是一个很好的方法,它并不是傻瓜的证明 – 另一个组件是教育和代码审查,以提出为您的团队工作的最佳做​​法,如可测试性和依赖注入.

总结

以上是内存溢出为你收集整理的如何防止构造函数在c#类中的滥用全部内容,希望文章能够帮你解决如何防止构造函数在c#类中的滥用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1258887.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存