feat: 公开宿主组合加载 API、Forge 风格依赖版本区间与加载顺序、程序集解析策略
Publish UPM package / publish (push) Successful in 3s
Publish NuGet packages / publish (push) Successful in 2m18s

- ShrinkModComponentDiscovery.Discover 公开:只发现、不执行生命周期
- ShrinkModLoader.LoadComposed / ShrinkModCordisRuntime.ApplyComposedAsync:宿主提供元数据组合加载,支持纯数据包与 IShrinkModWrapper 公开真实实例
- 公开 TryAttachEventBusInstance,随生命周期逆操作释放
- 依赖新增 VersionRange(Maven/Forge 区间语法)与 Ordering(Before/After)
- AssemblyResolvePolicy 可限制跨模组程序集解析
This commit is contained in:
cneicy committed 2026-11-10 07:39:22 +08:00
1 parent 5398036d3b
commit d15bf00512
29 files changed
+917 -132

No files matched your search

+5 -5
View File
@@ -19,9 +19,8 @@ namespace ShrinkModFramework
{
_host = host ?? throw new ArgumentNullException(nameof(host));
_source = source ?? throw new ArgumentNullException(nameof(source));
_inject = source.Info.Dependencies
.Where(dependency => !dependency.Optional)
.Select(dependency => ShrinkModContextHost.GetModKey(dependency.ModId))
_inject = host.GetPredecessors(source.Info.ModId)
.Select(ShrinkModContextHost.GetModKey)
.Distinct(StringComparer.Ordinal)
.ToArray();
_provide = new[] { ShrinkModContextHost.GetModKey(source.Info.ModId) };
@@ -37,7 +36,8 @@ namespace ShrinkModFramework
if (instance == null)
throw new InvalidOperationException($"Mod factory returned null: {_source.Info.ModId}");
var handle = new ShrinkModHandle(_source.Info, instance)
var publicInstance = instance is IShrinkModWrapper wrapper ? wrapper.PublicInstance : instance;
var handle = new ShrinkModHandle(_source.Info, publicInstance)
{
Generation = _host.NextGeneration()
};
@@ -70,7 +70,7 @@ namespace ShrinkModFramework
IDisposable eventBinding = null;
ctx.Effect(
() => eventBinding = ShrinkModOptionalRuntimeIntegration.TryAttachEventBusInstance(
instance.GetType(), instance, handle.Info.ModId, _host.VerboseLogging),
publicInstance?.GetType(), publicInstance, handle.Info.ModId, _host.VerboseLogging),
() =>
{
eventBinding?.Dispose();