Skip to content

aerooneqq/Manualfac

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Manualfac

Proof-of-concept DI container based on source generators.

Features:

  • Specify dependencies and their access modifiers with generic attributes:

    [Component, DependsOn<PrivateProtected, Class1, Class2, Class3, Class4>]
    public partial class Class5
    {
    }

    Source generator will generate constructor and fields for dependencies.

  • Register components as selected interface:

    [Component, As<IClass11>]
    public partial class Class1 : IClass1, IClass11
    {
    }
  • Override components in dependant projects:

    [Component, Overrides<Class2>]
    public partial class Class3 : Class2
    {
    }
  • Query several dependencies implementing same interface:

    [Component, DependsOn<Internal, IEnumerable<IClass1>>()]
    public partial class Class3
    {
    }
  • Specify ordering of dependencies with Before and After attributes:

    [Component, Before<Class6, Class7>, After<Class8>]
    public partial class Class5
    {
    }
  • Specify end-projects for which the resolver will be generated:

    [assembly: GenerateResolver]  
    TestConsoleAppInitializer.Initialize();
    TestConsoleAppResolver.ResolveOrThrow<Class1>()
  • Specify naming rules with Directory.Build.props

    <Project>
      <ItemGroup>
        <CompilerVisibleProperty Include="ManualfacDependencySuffix" />
        <CompilerVisibleProperty Include="ManualfacDependencyPrefix" />
      </ItemGroup>
    
      <PropertyGroup>
        <ManualfacDependencySuffix>suffix</ManualfacDependencySuffix>
        <ManualfacDependencyPrefix>prefix</ManualfacDependencyPrefix>
      </PropertyGroup>
    </Project>
    

Todos:

  • Different lifetimes of components?
  • Integration with other containers, like ASP NET Core default one, autofac...
  • Test it against nuget packages
  • Feature flags? Zones?
  • More configurable naming

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages