Rya*_*ott 153 c# dependency-injection inversion-of-control unity-container
我一直在阅读有关Unity(依赖注入,控制反转)的MSDN文章,但我认为我需要用简单的术语(或简单的例子)来解释它.我熟悉MVPC模式(我们在这里使用它),但我还不能真正掌握这个Unity的东西,我认为这是我们应用程序设计的下一步.
Chr*_*mes 171
Unity只是一个IoC"容器".Google StructureMap并试一试.我认为,当IoC的新东西对你来说是新的时候,我会更容易理解.
基本上,如果您了解IoC,那么您就会明白,您正在做的是在创建对象时反转控件.
没有IoC:
public class MyClass
{
IMyService _myService;
public MyClass()
{
_myService = new SomeConcreteService();
}
}
Run Code Online (Sandbox Code Playgroud)
使用IoC容器:
public class MyClass
{
IMyService _myService;
public MyClass(IMyService myService)
{
_myService = myService;
}
}
Run Code Online (Sandbox Code Playgroud)
如果没有IoC,依赖于IMyService的类必须新建一个要使用的服务的具体版本.这有很多原因(你将你的课程与IMyService的特定具体版本相结合,你不能轻易地对它进行单元测试,你不能轻易地改变它等等)
使用IoC容器,您可以"配置"容器以解决这些依赖关系.因此,使用基于构造函数的注入方案,您只需将接口传递给IMyService依赖项到构造函数中.使用容器创建MyClass时,容器将为您解析IMyService依赖关系.
使用StructureMap,配置容器如下所示:
StructureMapConfiguration.ForRequestedType<MyClass>().TheDefaultIsConcreteType<MyClass>();
StructureMapConfiguration.ForRequestedType<IMyService>().TheDefaultIsConcreteType<SomeConcreteService>();
Run Code Online (Sandbox Code Playgroud)
所以你所做的就告诉容器,"当有人请求IMyService时,给他们一份SomeConcreteService." 而且你还指出当有人要求MyClass时,他们会得到一个具体的MyClass.
这就是IoC容器真正做到的.他们可以做更多,但这是它的主旨 - 他们为你解决依赖关系,所以你不必(并且你不必在整个代码中使用"new"关键字).
最后一步:当你创建MyClass时,你会这样做:
var myClass = ObjectFactory.GetInstance<MyClass>();
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.随时给我发电子邮件.
Kev*_*son 37
我刚观看了David Hayden的30分钟Unity依赖注入IoC截屏,并认为这是一个很好的解释示例.以下是节目笔记的片段:
截屏视频显示了Unity IoC的几种常见用法,例如:
Cha*_*ran 32
Unity是一个像许多其他库一样的库,它允许您获取所请求类型的实例,而无需自己创建它.所以给定.
public interface ICalculator
{
void Add(int a, int b);
}
public class Calculator : ICalculator
{
public void Add(int a, int b)
{
return a + b;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用像Unity这样的库来注册要在ICalculator类型请求时返回的计算器,即IoC(控制反转)(此示例是理论上的,在技术上不正确).
IoCLlibrary.Register<ICalculator>.Return<Calculator>();
Run Code Online (Sandbox Code Playgroud)
那么现在当你想要一个ICalculator的实例时,你就是......
Calculator calc = IoCLibrary.Resolve<ICalculator>();
Run Code Online (Sandbox Code Playgroud)
通常可以将IoC库配置为在每次解析类型时保存单例或创建新实例.
现在让我们假设你有一个依赖于ICalculator的课程,你可以拥有它.
public class BankingSystem
{
public BankingSystem(ICalculator calc)
{
_calc = calc;
}
private ICalculator _calc;
}
Run Code Online (Sandbox Code Playgroud)
并且您可以设置库以在创建时将对象注入构造函数.
所以DI或依赖注入意味着注入另一个可能需要的对象.
Ben*_*wer 30
这个人WilcoxTutorials提供了针对初学者的Unity容器的出色演示.
第1部分:http://www.youtube.com/watch?v = CWwe9Z0Gyew
第2部分:http://www.youtube.com/watch?v =PsIbevgzQQE
在不到半小时的时间内,您将了解基础知识!
Bri*_*sen 10
Unity是一个IoC.IoC的要点是抽象类型本身之外的类型之间的依赖关系.这有几个优点.首先,它是集中完成的,这意味着当依赖项发生变化时,您不必更改大量代码(单元测试可能就是这种情况).
此外,如果使用配置数据而不是代码完成连接,您实际上可以在部署后重新连接依赖关系,从而在不更改代码的情况下更改应用程序的行为.
MSDN有一个开发人员使用Unity的依赖注入指南可能很有用.
开发人员指南首先介绍了依赖注入的基础知识,并继续介绍如何使用Unity进行依赖注入.截至2014年2月,开发人员指南涵盖了2013年4月发布的Unity 3.0.
| 归档时间: |
|
| 查看次数: |
104025 次 |
| 最近记录: |