Table of Contents

Interface IAutosaveWoven

Namespace
Nucs.JsonSettings.Autosave
Assembly
Nucs.JsonSettings.Autosave.dll

Compile-time proof that AspectInjector actually processed a class: the AutosaveAttribute aspect mixes this empty interface into every class it is applied to, in the same weave pass that appends the save advice to the setters. Source code never implements it -- the build does.

public interface IAutosaveWoven

Remarks

Exists because a silently skipped weave is the worst failure mode this library has: the [Autosave] class compiles, EnableAutosave() finds the attribute and succeeds, and nothing is ever saved. The attribute cannot witness the weave -- it is plain metadata, present whether or not AspectInjector ran (that is exactly why it survives an unwoven build) -- but an interface implementation ADDED BY the weave can. It has been measured to happen in the wild through no fault of the user: a direct AspectInjector reference with ExcludeAssets="build", or a single-pass msbuild -t:Restore;Build that evaluates the project before the package targets exist. EnableAutosave() therefore refuses a class that carries the attribute without carrying this interface.

Deliberately empty: nothing to implement, nothing for the mixin to delegate to, zero runtime cost -- the check is a single type test. Public only because woven consumer classes end up implementing it. Inherited like any CLR interface, so it witnesses that the weave ran over the hierarchy at all (the build-level failure above), not per-class advice coverage -- which setters save is still governed by where [Autosave] is applied, as documented on the attribute.