c# - 正确的 DI 项目/build设置

标签 c# deployment dependency-injection

希望是直截了当的。我正在查看一个 C# 产品,由于 Xamarin,它注定可能具有桌面 (WPF)、Web 和任意数量的移动构建输出。

有几个组成部分:

  • 我有一个“CoreApi”项目,它具有接口(interface)和共享模型,可以调用它们来编写任何应用程序前端(并实现以编写后端)。
  • 我还在另一个程序集中拥有所有“应用程序逻辑”——目前采用与 MVVM 模式中的 View 模型类似的样式,但以应用程序为重点。
  • applogic 中包含一个特定于平台的接口(interface)实现,它与动态生成用于播放的音频缓冲区有关。也将项目/程序集分开

我正在使用 Ninject,它运行良好。但随着解决方案的发展,包括其他项目类型(网络、移动客户端),我可以预见到一些“味道”:

目前,客户端项目引用了特定于平台的 (DirectX) 音频引擎和后端的本地/测试实现。它仍然使用 Ninject 并且不直接引用实现类,但是让它们可访问并像那样直接引用感觉是错误的。

我几乎想在构建解决方案时拥有不同的“包”:

  • 套餐一:桌面客户端+DirectX引擎+后端X
  • 包 2:带有后端 Y 的 Web 部署包
  • 套餐三:Android版,后端X + Android音频引擎...

我走在正确的轨道上吗?我真的想求助于构建后步骤,将内容复制到目标文件夹吗?

最佳答案

我会考虑使用 MSBuild 功能来执行必要的复制。我采用了使用 dependency.proj 文件的方法,您可以配置这些文件以根据您选择设置的任何配置选项执行适当的复制操作,例如您可以根据配置和 CPU 类型将特定文件复制到输出文件夹中。我不提倡使用旧式的后期构建步骤,因为这些步骤不可靠且难以调试。在我看来,MSBuild 是前进的方向。

关于c# - 正确的 DI 项目/build设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15790348/

相关文章:

deployment - 可以为部署到 Cloud Run 的容器获取静态 IP 地址吗?

deployment - Tomcat 7 跳过从 webapps 加载特定文件夹

java - 将 Spring 字段注入(inject)转换为构造函数注入(inject)(IntelliJ IDEA)?

xml - IoC/依赖注入(inject) - 请解释代码与 XML

java - jersey + grizzly + hk2 : Dependency injection, 但不进入资源

c# - 在 Azure 上托管的 ASP.net 项目中调用 Process.Start ("foo.exe")。如何限制 "foo.exe"的访问?

c# - EXE 未运行,配置意外更改?

c# - 我应该如何处理每个都可能引发错误/异常的操作列表中的错误?

c# - 为什么在 C# 中对私有(private)字段使用公共(public)属性?

ruby - 在部署期间更改 Ruby 版本