I have classes that should have properties with private setters (or private fields and Readonly properties associated with it). It is all right if I have static factory methods in these classes to create instances. However lot of developers write that "Static factory methods is architectural black hole" as it is impossible to inherit static methods.
C# doesn't have friendly classes, hence I can't do it using Factories.
What do you think about using static factory methods?
As a default i would create instances by passing the required arguments to the constructor. If the constructor has to many parameters you either need a parameter object or you are violating SRP. If you have multiple choices of creating the instances depending on arguments, AND the logic IS NOT complex than a static factory method is probably the best way to keep the creation logic inside the class.
If you have complex instance creating rules that depend on the parameters and maybe other factors you could use a factory, maybe a fluent factory, which gathers all the required parameters an performs the needed logic and then uses the class public constructor to create the object.