VContainer-optimization/codegen | 优化——预生成 IL 代码(已弃用)

:::danger
已弃用。请改用 Source Generator 源码生成器
:::

:::caution
需 Unity 2019.3 或更高版本。
:::

VContainer 通过编译时生成 IL 代码提升性能。
运行时无反射开销,速度提升 3-6 倍。
支持 IL2CP。

VContainer 自动生成的代码示例(作为 IL):

class ClassA
{
    private sealed class __GeneratedInjector : IInjector
    {
        public object CreateInstance(IObjectResolver resolver, IReadOnlyList<IInjectParameter> parameters)
        {
            I6 fromConstructor = resolver.ResolveOrParameter<I6>("fromConstructor1", parameters);
            I7 fromConstructor2 = resolver.ResolveOrParameter<I7>("fromConstructor2", parameters);
            return new ClassA(fromConstructor, fromConstructor2);
        }

        public void Inject(object instance, IObjectResolver resolver, IReadOnlyList<IInjectParameter> parameters)
        {
            ClassA clasA = (ClassA)instance;
            I3 service = resolver.ResolveOrParameter<I3>("service3", parameters);
            I4 service2 = resolver.ResolveOrParameter<I4>("service4", parameters);
            allInjectionFeatureService.MethodInjectable1(service, service2);
            I5 service3 = resolver.ResolveOrParameter<I5>("service5", parameters);
            I6 service4 = resolver.ResolveOrParameter<I6>("service6", parameters);
            classA.MethodInjectable2(service3, service4);
            classA.PrivatePropertyInjectable = resolver.Resolve<I2>();
            classA.PublicPropertyInjectable = resolver.Resolve<I3>();
            classA.privateFieldInjectable = resolver.Resolve<I4>();
            classA.PublicFieldInjectable = resolver.Resolve<I5>();
        }
   }

启用代码生成

1. 添加 VContainer.EnableCodeGen asmdef 引用

项目中如果有 asmdef 引用了以下两个 asmdef,它们将成为 IL 编织的目标。

  • VContainer
  • VContainer.EnableCodeGen

2. 构建程序集

下次编译指定的程序集时,VContainer 会对编译后的 dll 进行修改。

成功后将会记录如下形式日志:

VContainer code generation optimization for MyGame.dll 24 types (40.0355ms)

:::note
Unity 2020.2 及更高版本中,ILPostProcessor 无法再输出日志。
作为临时措施,上述日志会以警告形式显示,但未来可能会移除。
:::

posted @   凌雪寒  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示