C#控制反转的使用详解
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>前言</li><li>1、不使用控制反转</li><li>2、使用控制反转</li></ul></div><p class="maodian"></p><h2>前言</h2><p>控制反转是将对象的创建、依赖管理和生命周期控制从应用程序代码中转移出来,交由外部容器来管理,这种外部容器也称为IOC容器,在C#中比较常见的IOC容器是Microsoft.Extensions.DependencyInjection</p>
<p class="maodian"></p><h2>1、不使用控制反转</h2>
<p>下面的代码违反了软件设计中” 对象的创建和使用要分离“的原则,对象创建和使用都是在MainWindow类中完成,代码耦合性很高。</p>
<div class="jb51code"><pre class="brush:csharp;">public MainWindow()
{
InitializeComponent();
//非控制反转
ICamera camera= new Camera_DaHua();
camera.OpenCamera();
}
</pre></div>
<p class="maodian"></p><h2>2、使用控制反转</h2>
<p>使用IOC容器Microsoft.Extensions.DependencyInjection</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026010410451729.png" /></p>
<p>下面的代码中你看不到ICamera对象的创建过程,只能看到它的使用过程,因为对象的创建全部在IOC容器中实现了。</p>
<div class="jb51code"><pre class="brush:csharp;">public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//控制反转
var services = new ServiceCollection();
// 2. 注册服务
services.AddScoped(typeof(ICamera ), typeof(Camera_DaHua ));
// 3. 构建服务提供者,用于解析服务
var builder = services.BuildServiceProvider();
// 4. 从服务提供者中解析并使用服务
var car2 = builder.GetService<ICamera>();
car2.OpenCamera ();
}
}
</pre></div>
<p>到此这篇关于C#控制反转的使用详解的文章就介绍到这了,更多相关C#控制反转内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
<div class="art_xg">
<b>您可能感兴趣的文章:</b><ul><li>C#中控制反转和依赖注入原理及实现</li></ul>
</div>
</div>
<!--endmain-->
頁:
[1]