{
    "href": "/post/2026/05/25/resolver-interop-now-open-for-public-review/",
    "relId": "2026/05/25/resolver-interop-now-open-for-public-review",
    "title": "Resolver-Interop Now Open For Public Review",
    "author": "pmjones",
    "tags": [
        {
            "href": "/tag/programming/",
            "relId": "programming",
            "title": "Programming",
            "author": null,
            "created": null,
            "updated": [],
            "markup": "markdown"
        },
        {
            "href": "/tag/php/",
            "relId": "php",
            "title": "PHP",
            "author": null,
            "created": null,
            "updated": [],
            "markup": "markdown"
        },
        {
            "href": "/tag/interop/",
            "relId": "interop",
            "title": "Interop",
            "author": null,
            "created": "2025-02-03 20:11:59 UTC",
            "updated": [
                "2025-02-03 20:11:59 UTC"
            ],
            "markup": "markdown"
        }
    ],
    "created": "2026-05-25 14:47:38 UTC",
    "updated": [
        "2026-05-25 14:47:38 UTC"
    ],
    "markup": "markdown",
    "html": "<p>I am pleased to announce that the <a href=\"https://github.com/resolver-interop/interface\">Resolver-Interop</a> standard interface package is now open for public review.</p>\n<p><a href=\"https://github.com/resolver-interop/interface\">Resolver-Interop</a> provides an interoperable package of standard interfaces\nfor autowiring resolver functionality in PHP 8.4 or later. It reflects,\nrefines, and reconciles the common practices identified within\n<a href=\"https://github.com/resolver-interop/interface/blob/1.x/README-RESEARCH.md\">several pre-existing projects</a> to define these\ninterfaces:</p>\n<ul>\n<li>\n<p><a href=\"https://github.com/resolver-interop/interface#classresolver\"><em>ClassResolver</em></a> to afford resolving a class to a new instance with autowired arguments;</p>\n</li>\n<li>\n<p><a href=\"https://github.com/resolver-interop/interface#reflectionparameterresolver\">Parameter-</a>, <a href=\"https://github.com/resolver-interop/interface#reflectionmethodresolver\">setter-</a>, and <a href=\"https://github.com/resolver-interop/interface#reflectionpropertyresolver\">property-</a>injection attributes and their related orchestrations;</p>\n</li>\n<li>\n<p><a href=\"https://github.com/resolver-interop/interface#callresolver\"><em>CallResolver</em></a> to afford invoking a callable with autowired arguments;</p>\n</li>\n<li>\n<p><a href=\"https://github.com/resolver-interop/interface#resolvable\"><em>Resolvable</em></a>, which lets callers pass deferred\ncontainer lookups in argument arrays without forcing the lookup at\nconstruction time; and,</p>\n</li>\n<li>\n<p><a href=\"https://github.com/resolver-interop/interface#resolverthrowable\"><em>ResolverThrowable</em></a> to mark exceptions as resolver-related.</p>\n</li>\n</ul>\n<p>Where the researched projects typically expose autowiring through a single\ncontainer class with several methods (<code>get()</code>, <code>make()</code>, <code>call()</code>, and so on),\nResolver-Interop splits those operations into separate single-method\ninterfaces, so consumers can depend on exactly the surface they need and\nimplementors can combine them as they see fit.</p>\n<p>Constructor injection is the documented default across the researched\nprojects, and Resolver-Interop summarises that guidance: constructor injection\nis preferred above all; setter-injection is supported for cases where it is\nunavoidable; and property-injection is available as an absolute last resort.\nThe package does not forbid post-construction injection, but it makes the\nappropriate scope explicit.</p>\n<p>Resolver-Interop can be combined with <a href=\"https://github.com/ioc-interop/interface\">Ioc-Interop</a> to build an autowiring IOC container system.</p>\n<p>The <a href=\"https://github.com/resolver-interop/impl/\">reference implementations</a> demonstrate how the interfaces can be used.</p>\n<p>Please offer your comments and criticism as <a href=\"https://github.com/resolver-interop/interface/issues\">issues or PRs out at Github</a>.</p>\n"
}
