首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.NET MVC3 Hand coding IoC

ASP.NET MVC3 Hand coding IoC
EN

Stack Overflow用户
提问于 2012-01-28 05:46:35
回答 3查看 456关注 0票数 3

Sprint.NET、Unity、Autofac、Castle.Windsor都是可用的IoC框架。然而,我喜欢自己写的学习曲线和控制力。这绝对是一种普遍的做法,不是“重新发明轮子”,而只是使用预先存在的结构。如果你的评论是这样的,请温文尔雅。

不使用XML也能实现IoC吗?在我看来,前面提到的大多数框架(如果不是所有框架)都使用XML,但我更愿意用C#编写我的框架,而不是使用XML加载.dll。无论如何,C#最终都会转换成一个.dll。

根据我的理解,如果错误,请更正,IoC可以与DI一起使用,使类的功能基于其定义和实现,同时允许分离关注点。

这是在C#中使用微软的库System.ComponentModel.IContainer通过拥有一个继承它的类来完成的。一个类,比如产品,应该有一个接口IProduct。然后,泛型构造函数将从IContainer继承,并在构造函数中允许传入存储库、实例化的对象和传入的函数。这将允许控制器操作随后实例化一个接口(IProduct),实例化具有当前存储库实例的通用构造函数,然后将接口和函数传递给它。

这个设置准确吗?

我仍然在努力学习更多关于这个主题的知识,并且已经阅读了关于IoC,DI的维基文章,阅读了关于Castle.Windsor,ninject,Unity的文章,并查看了MSDN中关于所使用的C#库的多个定义。任何帮助、更正或建议,我们都非常感谢。谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-28 09:29:06

我认为在没有DI容器的情况下开始是一个很好的练习。在专注于使用依赖注入框架之前,请专注于最佳模式和实践。特别是,围绕依赖注入设计所有类,并确保您的代码遵循SOLID原则。这两个听起来都很容易,但这需要转变思维方式和大量的练习,然后你才能做到这一点(但这是非常值得的)。

当你做到这一点,并且做得很好,你会很快注意到你的应用程序将以惊人的方式发展。您的代码将以您以前从未想象过的方式进行测试和扩展,而您的代码不会随着时间的推移而腐烂(但是,它会持续关注以防止代码腐烂)。

尽管如此,当你把所有这些都做好了(再说一次,这需要大量的练习),你仍然会有一部分应用程序,尽管你尽了最大的努力,但随着应用程序的增长,它将变得更加复杂和难以维护。这是应用程序中将所有依赖项连接在一起的部分:Composition Root

这就是DI容器的用武之地。他们有花哨的名字,并在功能上相互竞争,但他们的目标可以用一句话来表述:

DI容器的目标是保持组成根的可维护性。

虽然您可以编写自己的简单DI容器来连接您的依赖项,但为了防止您的crucial变成一个脆弱的、不断变化的泥球,容器必须至少有一个关键功能:自动构造函数注入( Automatic Constructor Injection,也称为.自动布线)。使用自动连接,容器将查看它需要创建的类型的构造函数参数,并且它将根据这些参数的类型向其中注入依赖项。此功能将区分维护噩梦和健康的组合根。尽管创建支持自动连接的容器并不困难(使用表达式树,它需要大约20行代码),但当您开始需要自动连接时,就是开始使用现有DI框架之一的时候了。

因此,总而言之,如果您觉得手动操作有助于您的学习体验,请这样做,只要您坚持使用SOLID、DI、DRY和TDD。当为应用程序中的每个更改更改组成根的负担变得太大时(这将比您预期的更快),请切换到已建立的框架。

票数 5
EN

Stack Overflow用户

发布于 2012-01-28 06:02:35

不使用

可以实现IoC吗?

是的,可以在不使用任何XML的情况下配置Ninject、Unity、Castle Windsor和Autofac。(不确定Spring.NET,上次我用它是不可能的,1.3版)

根据我的理解,如果错误,请纠正,IoC可以与DI一起使用,使类的功能基于其定义和实现,同时允许分离关注点。

如果在" IoC“下你的意思是"IoC容器”,那么是的,它可以与DI一起使用,但由于DI是控制反转的特殊情况,你的IoC容器将只是你的依赖项的容器。仅仅拥有它,你将不会神奇地得到任何DI友好的类型。它只是对管理反向依赖项的支持。

编辑

正如Mystere Man在他的回答中指出的那样,您需要提高对IoC容器的理解。因此,我建议阅读这篇(来自Mark Seeman的)关于所有这些东西的wonderful book

票数 8
EN

Stack Overflow用户

发布于 2012-01-28 05:58:54

我建议首先使用现有的DI容器,以便从最终用户的角度了解它是如何工作的。然后你就可以重新设计轮子了。我最喜欢的一句话是“你必须先知道规则,然后才能打破它们”。

你所说的一些话没有多大意义。据我所知,你不必在任何框架中使用System.ComponentModel.IContainer。也许Unity需要这个(微软的容器),但其他的都不需要。我不熟悉Unity thogh。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9040510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档