DpdtInject icon indicating copy to clipboard operation
DpdtInject copied to clipboard

improve open generics with constraints?

Open lsoft opened this issue 3 years ago • 0 comments

now we have:

//the following statement will bind A0 and A2; A1 will be excluded due to IExclude<>
ScanInAssembliesWith<A0>()
    .SelectAllWithOpenGeneric<IA<object, object>>() //generic arguments 'object' means NOTHING! it will be removed by Dpdt, so IA<object, object> will be transformed into IA<,> (open generic)
    .ExcludeAllWithOpenGeneric<IExclude<object, object>>() //again, 'object' means nothing, as above
    .FromAllInterfaces()
    .ToItself()
    .WithSingletonScope()
    ;

we may want to add an additional constraints for conventional search:

//the following statement will bind A0 and A2; A1 will be excluded due to IExclude<>
ScanInAssembliesWith<A0>()
    .SelectAllWithOpenGeneric<IA<object, object>>() //generic arguments 'object' means NOTHING! it will be removed by Dpdt, so IA<object, object> will be transformed into IA<,> (open generic)
    .ApplyGenericConstraintChildAt<1, SomeClass>() //applies a generic constraint at second generic parameter IA<,here> to be derived from SomeClass; so IA<,> transformed to IA<,any child of SomeClass>
    //ApplyGenericConstraintChildAt applied to the previous SelectAllWithOpenGeneric declaration
    .ExcludeAllWithOpenGeneric<IExclude<object, object>>() //again, 'object' means nothing, as above
    .ApplyGenericConstraintChildOrItselfAt<0, ExcludedClass>() //applies a generic constraint at first generic parameter IExclude<here,> to be derived from ExcludedClass; so IExclude<,> transformed to IExclude<any child of ExcludedClass or itself,>
    .FromAllInterfaces()
    .ToItself()
    .WithSingletonScope()
    ;

//new constraints:
//ApplyGenericConstraintChildAt
//ApplyGenericConstraintChildOrItselfAt

or:

//ApplyGenericConstraint<ChildAt<...>>
//ApplyGenericConstraint<ChildOrItselfAt<...>>

lsoft avatar Apr 16 '22 17:04 lsoft