{"id":18732505,"url":"https://github.com/gsscoder/tagger","last_synced_at":"2025-09-01T01:31:03.888Z","repository":{"id":34914446,"uuid":"38961996","full_name":"gsscoder/tagger","owner":"gsscoder","description":".NET library to mock object properties with attributes","archived":false,"fork":false,"pushed_at":"2020-06-25T14:17:12.000Z","size":641,"stargazers_count":2,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-23T13:46:34.935Z","etag":null,"topics":["csharp","dotnet","dotnet-core","library","mocking","testing"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"acorncache/acorn-cache","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gsscoder.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-07-12T12:57:39.000Z","updated_at":"2020-05-09T07:19:21.000Z","dependencies_parsed_at":"2022-09-18T06:59:28.413Z","dependency_job_id":null,"html_url":"https://github.com/gsscoder/tagger","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/gsscoder/tagger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gsscoder%2Ftagger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gsscoder%2Ftagger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gsscoder%2Ftagger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gsscoder%2Ftagger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gsscoder","download_url":"https://codeload.github.com/gsscoder/tagger/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gsscoder%2Ftagger/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273064105,"owners_count":25039259,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","dotnet","dotnet-core","library","mocking","testing"],"created_at":"2024-11-07T15:06:27.813Z","updated_at":"2025-09-01T01:31:03.571Z","avatar_url":"https://github.com/gsscoder.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![NuGet](https://img.shields.io/nuget/dt/tagger.reflect.svg)](https://nuget.org/packages/tagger.reflect)\n[![NuGet](https://img.shields.io/nuget/v/tagger.reflect.svg)](https://nuget.org/packages/tagger.reflect)\n\n# \u003cimg src=\"/assets/icon.png\" height=\"30px\" alt=\"CSharpx Logo\"\u003e Tagger.Reflect\n\n.NET library to mock object properties with attributes.\n\n## What is for?\n\nI initially designed this library for writing tests for [Command Line Parser Library](https://github.com/commandlineparser/commandline). Although it's main purpose is testing, it can be helpful in the scope of dynamic programming.\n\n## Targets\n\n- .NET Standard 2.0\n- .NET Framework 4.6.1\n\n## Install via NuGet\n\n```sh\n$ dotnet add package Tagger.Reflect --version 1.6.9-beta\n```\nThe latest stable version is [1.0.3](https://github.com/gsscoder/tagger/tree/v1.0.3).\n\n## At a glance\n\n```csharp\ninterface IMyInterface\n{\n    string Foo { get; set; }\n    int Bar { get; set; }\n    bool Baz { get; set; }\n}\n\n// define an anonymous template limited to target properties\nvar mirror = new Mirror(new { Foo = default(string) })\n    .Implement\u003cIMyInterface\u003e()\n    .Add(x =\u003e x.ForProperty(\"Foo\")\n               .Define\u003cMyAttribute\u003e()\n               .AttributeCtor(new { index = 0 })\n               // define an anonymous instance for each attribute\n               // property to set\n               .AttributeProperty(new { Dir = \"/etc/app\" })\n               .AttributeProperty(new { Config = \"file.dat\" });\n\nvar instance = mirror.Unwrap\u003cIMyInterface\u003e();\n\n// instance layout:\n// class anonymous : IMyInterface {\n//     ...\n//     [MyAttribute(0, Dir = \"/etc/app\", Config = \"file.dat\")]\n//     public string Foo { get; set; } \n//     ...\n// }\n```\n\nSee this [unit test](https://github.com/gsscoder/tagger/blob/master/tests/Tagger.Reflect.Tests/Unit/MirrorTests.cs) for more examples.\n\n## Latest Changes\n\n- New fluent interface.\n- Tests refactoring.\n- New tests.\n\n## Icon\n\n[Tag](https://thenounproject.com/search/?q=tagger\u0026i=3051269) icon designed by Eucalyp from [The Noun Project](https://thenounproject.com/).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgsscoder%2Ftagger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgsscoder%2Ftagger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgsscoder%2Ftagger/lists"}