Skip to content

静的コード生成で依存関係を解決する、DIコンテナ的なアナライザー+CodeFix。

License

Notifications You must be signed in to change notification settings

numanicloud/Deptorygen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Deptorygen

ファクトリークラスを生成するソースコードジェネレータ。

生成元となるコード

namespace Sample
{
    class Service {}

    class Client
    {
        public Client(Service service) {}
    }

    [Deptorygen.Annotations.Factory]
    interface IFactory
    {
        Service ResolveService();
        Client ResolveClient();
    }
}

生成されるコード

// <autogenerated />
#nullable enable
using System;
using System.Collections.Generic;

namespace Sample
{
    internal partial class Factory : IFactory
        , IDisposable
    {
        private Service? _ResolveServiceCache;
        private Client? _ResolveClientCache;

        public Factory()
        {
        }

        public Service ResolveService()
        {
            return _ResolveServiceCache ??= new Service();
        }

        public Client ResovleClient()
        {
            return _ResolveClientCache ??= new Client(ResolveService());
        }

        public void Dispose()
        {
        }
    }
}

解説

Client クラスは Service クラスをコンストラクタで要求します。 この2つのクラスをnewする際の煩わしい依存関係解決をコード生成に任せます。

IFactory インターフェースに Factory 属性を付けることで、 このインターフェースからファクトリークラスを生成するよう指定しています。

IFactory インターフェースの持っているメソッドは、生成されるクラスによって実装されます。 戻り値の型として指定されたクラス群は、それぞれ依存関係を解決した状態で生成され、キャッシュされます。 この例では、Clientクラスを生成する部分のコードにて、そのコンストラクタにClientクラスの依存先である Serviceクラスのインスタンスを与えるようなコードが自動で生成されます。

概要

DeptorygenはC#コードに対してアナライザーとCodeFixを提供することで、 クラス間の依存関係を解決しながらインスタンスを生成するDIコンテナの役割を果たします。

プロジェクト名は「Dependency Factory Generator」の略です。

入手

Nuget Galleryにて、以下のパッケージをインストールしてください。

  • Deptorygen
  • Deptorygen.Annotations

GenericHostとの連携機能が必要であれば、以下のパッケージもインストールしてください。

  • Deptorygen.GenericHost

実行

Visual Studio 2019で動作確認しています。

動作させるために、%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Community\Common7\IDE に .NET Framework向けの netstandard.dll を配置する必要があります。 このDLLは恐らく、 %ProgramFiles(x86)%\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\nestandard.dll にあります。

Deptorygenパッケージをプロジェクトにインストールしたら、まずはVisual Studioを再起動する必要があります。 再起動後、[Factory]属性がついているインターフェースに対して出るクイックヒント(電球マーク💡)を通じてコード生成を実行することができます。

詳しい使い方

リポジトリ内のマニュアルをご覧ください。

About

静的コード生成で依存関係を解決する、DIコンテナ的なアナライザー+CodeFix。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published