私は、工場、デコレータ、責任の連鎖のようなミッシュマッシュで遊んでいます。基本的には、リクエストオブジェクトを受け取って解析し、より具体的な内部の工場にチェインを渡すファクトリを構築しています。私は下の構造に到着しましたが、それには問題があります。アップMoreSpecificThingFactory
SpecificThingFactory
内からnew'dを返すようにしようとしたときジェネリック、ファクトリ、そしてより多くの派生型を返す
public abstract class AbstractFactoryRequest { }
public class SpecificFactoryRequest : AbstractFactoryRequest { }
public class MoreSpecificFactoryRequest : SpecificFactoryRequest { }
public interface IThing { }
public interface IThingFactory<in T> where T : AbstractFactoryRequest
{
IThing GetThing(T request);
}
public abstract class AbstractThingFactory<T> : IThingFactory<T> where T : AbstractFactoryRequest
{
public IThing GetThing(T request)
{
var innerFactory = GetInnerFactory(request);
return innerFactory.GetThing(request);
}
protected abstract IThingFactory<T> GetInnerFactory(T request);
}
public class SpecificThingFactory : AbstractThingFactory<SpecificFactoryRequest>
{
protected override IThingFactory<SpecificFactoryRequest> GetInnerFactory(SpecificFactoryRequest request)
{
return (IThingFactory<SpecificFactoryRequest>)new MoreSpecificThingFactory();
}
}
public class MoreSpecificThingFactory : AbstractThingFactory<MoreSpecificFactoryRequest>
{
protected override IThingFactory<MoreSpecificFactoryRequest> GetInnerFactory(MoreSpecificFactoryRequest request)
{
// return an even more specific factory...
}
}
問題が発生します。上記のようにキャストされると、ReSharperはこれを疑わしいキャストと呼びます。キャストなしでは、MoreSpecificThingFactoryとIThingFactoryの間に暗黙的な変換はないとコンパイラは言います。私はこれが継承されているのでおそらくこれがうまくいくと思っていました。これを修正する方法はありますか?
ありがとうを適用する必要があると思われます。私はこれが私が探しているものだと思います。私は少し後にそれに取り組み、その時の答えを選択します。また、私は何らかの理由で「責任の連鎖」を考え、「命令の連鎖」をタイプしたと言いたいと思います。私はこれを解決します。 – bubbleking