[Feature Request] [Pull Request Question ] How to implement properties with auto-getter '=>'
Opened this issue · 5 comments
Hello!
I am still new to the Roslyn API, but learning fast!
I noticed currently in Testura, there are only options for: Get
and GetSet
types of properties.
I have a use-case where I am generating a DbContext
file. I want to generate:
public class MySchoolDbContext : DbContext
{
// I want to have the property initializer be '=>' generated by Testura.Code
public DbSet<Student> Students => Set<Student>();
}
I don't think this is possible currently.
The goal is to add an additional Property Setter type of: =>
If you are busy, I can implement the feature myself in Testura.Code and test it, then open a pull request. I examined the code, and I could not figure out 'how' to modify the RoslynAPI to generate this. I suspect it hast to do something with SyntaxToken....
but im not sure exactly.
If you can point me in the right direction, I can get this implemented directly in Testura.Code
then open a pull request immediately.
Thanks again for the awesome library!
Hey there and sorry for the late response!
I can take a look at it can come back to you, maybe it just a quick fix to add it into the framework.
I have pushed code for this now. I created it as a new ArrowExpressionProperty
class and you can use it like the other properties (with the difference thast it takes a expression syntax instead of body/property type). So for example:
PropertyGenerator.Create(new ArrowExpressionProperty(
"MyProperty",
typeof(int),
Statement.Expression.Invoke("Set", generics: new[] { CustomType.Create("Student") }).AsExpression(),
new List<Modifiers> { Modifiers.Public, Modifiers.Virtual })
Will generate:
public virtual int MyProperty => Set<Student>();
Can create a new nuget version after we have updated the nuget references.
I have pushed code for this now. I created it as a new
ArrowExpressionProperty
class and you can use it like the other properties (with the difference thast it takes a expression syntax instead of body/property type). So for example:PropertyGenerator.Create(new ArrowExpressionProperty( "MyProperty", typeof(int), Statement.Expression.Invoke("Set", generics: new[] { CustomType.Create("Student") }).AsExpression(), new List<Modifiers> { Modifiers.Public, Modifiers.Virtual })
Will generate:
public virtual int MyProperty => Set<Student>();
Can create a new nuget version after we have updated the nuget references.
Big thanks for this! I created a PR here with the updated packages and added some comments. I really appreciate you adding the Arrow expression, I spent a long time and could not figure out how to do it, now I have learned more thanks to you!
My PR: #97
Great! I'm not sure if it's possible for you to publish it as well but otherwise I can do do it after you have merged the PR.