文档

​
​

Development

User Acquisition

Monetization

工业

Cloud Code

Open Unity Dashboard

Cloud Code

LiveOps
​
​
Cloud Code
  • Overview
  • Get started
  • Server authority
  • Cloud Code C# modules
    • Overview
    • Get started
    • Concepts
    • Tutorials
      • Run modules
      • Write modules
      • Development essentials
        • Write unit tests
        • Dependency injection
        • Custom serialization
        • Batch requests
        • In-memory cache
      • Automate deployment
      • Integrate services
      • Advanced configuration
      • Use Cases
    • Reference
  • Cloud Code JavaScript scripts
  • Logging
  • Use-case samples
  • Privacy and consent
  1. Cloud Code

依赖项注入

Decouple hard-coded dependencies in your code using dependency injection for easier unit testing.
阅读时间3 分钟
最后更新于 9 个月前

Cloud Code 支持依赖项注入 (DI),这样您就可以分离代码中的硬编码依赖项,从而更轻松地进行单元测试。此处的 DI 基于 .Net 创建的类似系统。
Cloud Code 支持以下依赖项类型:
  • 单例:单例依赖项创建一次,然后在需要时注入。
  • 作用域:作用域依赖项针对每个请求创建一次。无论是在构造函数中还是在方法本身中使用都无关紧要,因为这两种情况下都关联到同一个对象。
  • 瞬态:每次请求瞬态依赖项时创建瞬态依赖项。如果在构造函数中请求瞬态依赖项,然后在某个方法中再次请求,这两个请求将是两个单独的实例。

依赖项注入设置

为了设置依赖项,必须创建一个实现
ICloudCodeSetup
接口的类。
以下示例定义了一个单例接口及其实现,但您也可以通过
AddScoped
或
AddTransient
来使用作用域依赖项或瞬态依赖项。
C#
using Unity.Services.CloudCode.Core;namespace ExampleModule;public interface IRandomNumber{ public int GetRandomNumber();}public class LockedRandomNumber : IRandomNumber{ private int randomNumber; public LockedRandomNumber() { randomNumber = Random.Shared.Next(); } public int GetRandomNumber() { return randomNumber; }}public class ModuleConfig : ICloudCodeSetup{ public void Setup(ICloudCodeConfig config) { config.Dependencies.AddSingleton<IRandomNumber, LockedRandomNumber>(); }}
请注意:
  • 单例一次生成一个随机数,然后在服务处于活动状态期间保留这个随机数。
  • 作用域针对每个请求创建一个新实例,但无论您在何处进行请求,该请求的数量都保持不变。
  • 瞬态每次请求时都会创建一个新实例,因此每次都返回一个随机数。

依赖项注入用法

要支持依赖项注入,请将
CloudCodeFunction
及其类构造函数纳入您的方法,如以下示例所示。
C#
using Unity.Services.CloudCode.Core;namespace ExampleModule;public struct DependencyInjectionResult{ public int ConstructorNumber; public int MethodNumber;}public class TestDependencyInjection{ private int number; public TestDependencyInjection(IRandomNumber randomNumber) { number = randomNumber.GetRandomNumber(); } [CloudCodeFunction("TestInjection")] public DependencyInjectionResult TestInjection(IRandomNumber randomNumber) { return new DependencyInjectionResult { // Will always return the same number during the session ConstructorNumber = number, MethodNumber = randomNumber.GetRandomNumber(), }; }}
警告
警告:虽然会在多个请求之间保留单例,但请求之间仍可能有所不同,因为 Cloud Code 会在需要时扩展到多个 pod 以满足需求。
请参阅 Microsoft 关于依赖项注入用法的文档。

Copyright © 2026 Unity Technologies
法律信息隐私政策CookiesDocumentation Terms of Use请勿出售或分享我的个人信息您的隐私选择(Cookie 设置)

“Unity”、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属公司在美国和其他地方的商标或注册商标(此处查看更多信息)。其他名称或品牌是其各自所有者的商标。

为方便起见,一些页面是机器翻译的,可能包含不准确的内容。如有信息不一致的情况,以英文版本为准。

  • 在本页上
    • 依赖项注入设置

    • 依赖项注入用法


报告此页面的问题