是否可以创建一个Roslyn分析器,该分析器要求从特定基类派生的任何类都包含静态字段

时间:2019-04-18 20:12:22

标签: c# roslyn

这是我现在拥有的代码的精简版。

public abstract class Base
{

}

public interface IStringConstructable
{
    Base Construct(string s);
}

public interface IStreamConstructable
{
    Base Construct(Stream stream);
}

public class Derived1 : Base, IStreamConstructable
{
    private static Derived1 singleton = new Derived1();
    public static Derived1 Singleton { get { return singleton; } }

    private Derived1() { }
    public Derived1(Stream stream) { }

    Base IStreamConstructable.Construct(Stream stream)
    {
        return new Derived1(stream);
    }
}

public class Derived2 : Base, IStringConstructable, IStreamConstructable
{
    private static Derived2 singleton = new Derived2();
    public static Derived2 Singleton { get { return singleton; } }

    private Derived2() { }
    public Derived2(string s) { }
    public Derived2(Stream stream) { }

    Base IStringConstructable.Construct(string s)
    {
        return new Derived2(s);
    }

    Base IStreamConstructable.Construct(Stream stream)
    {
        return new Derived2(stream);
    }
}

整个问题的关键是我想避免使用反射。我希望在派生类型的实现中需要的所有内容都是编译时间要求。我可以获取为给定派生类型实现的每个接口的实例的列表。然后可以根据情况调用正确的Construct方法。知道是否存在Singleton字段/属性是问题。无法保证此属性将在每个派生类上存在,因为在基类上不需要此属性。而且,每个派生类都不需要此属性。只有那些实现接口之一的接口。没有这些接口,就无法保证存在匹配的构造函数。

所有这些使我想到一个问题,即是否可以创建一个Roslyn分析器来检查特定类是否包含特定属性/字段。希望这是有道理的。

0 个答案:

没有答案