Csharp/C#教程:控制台应用程序的dependency injection和项目结构分享


控制台应用程序的dependency injection和项目结构

我有4个项目:

核心(IServer):

DependencyResolver:

基础设施(服务):

安慰:

Requierements:

我试图只在DependencyResolver中使用StructureMap。 此外,控制台应用程序不应该了解有关Infrastucture的任何信息。

当我不想在我的控制台应用程序上引用StructureMap时,我必须构建一个ServiceLocator。

在DependencyResolver中我有一个Bootstrapper负责调用StructureMap注册表内容(Register)

在我的控制台应用程序中,我想获得一个实例。 为此,我需要引用StructureMap。 另一种方法是在StructureMaps解析方法周围编写一个小包装器。

还有其他更好的方法将控制台与StructureMap分离吗?

虽然我看到了分离IoC寄存器,解析,从应用程序实现中释放的原因,但我没有看到为什么IoC容器不应该在控制台应用程序(组合根)和另一个应用程序实现中的原因。而是组装。

这样控制台应用程序非常简单:

  1. 创建容器
  2. 加载容器配置
  3. 解决应用程序
  4. 调用应用程序上的运行并传递控制台参数
  5. 当应用程序退出run方法时处置容器

使用SM它看起来像这样:

public void Main(params string[] args) { using (var container = new Container()) { container.LoadAllConfigurationModules(); container.AddRegistry(); container.GetInstance().Run(args); } } 

对于启动时无法创建的内容,您可以在应用程序集中创建工厂界面:

 interface ISomeFactory { ISomeDependency CreateSomeDependency() } 

并通过注入容器并使用它来解析实例,在控制台应用程序中实现此接口。 我想SM实现看起来像这样:

 public class SomeFactory : ISomeFactory { public SomeFactory(IContainer sontainer) { this.container = container; } ISomeDependency CreateSomeDependency() { this.container.GetInstance(); } } 

其他IoC容器甚至具有自动实现这些接口工厂的function。

上述就是C#学习教程:控制台应用程序的dependency injection和项目结构分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1012404.html

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐