1

バックグラウンド:

この質問を正確に表現する方法がわからないので、これは私が達成しようとしていることの例です:

public interface IEverythingVM : IA, IB
{
    MyTypeA {get;}
    MyTypeB {get;}
    MyTypeC {get;}

    MyTypeD {get;}
    MyTypeE {get;}
    MyTypeF {get;}
}

public class EverythingVM : IEverythingVM
{
    // Populate everything from MyTypeA to MyTypeF
}

public interface IA
{
    MyTypeA {get;}
    MyTypeB {get;}
    MyTypeC {get;}
}


public interface IB
{
    MyTypeD {get;}
    MyTypeE {get;}
    MyTypeF {get;}
}

実現:

私は次のようなことができるという印象を受けましたが、それを書き出すと、なぜそれがうまくいかないのかがはっきりとわかります.ばかげているので、私は大声で笑い声を上げたいと思います。

{
    IA varIA = new EverythingVM(param1, param2);
    IB varIB = new EverythingVM(param1, param2);

    var cm = new ComparisonManager(varIA, varIB);        
}

public class ComparisonManager
{
    public ComparisonManager(IEverythingVM varEIA, IEverythingVM varEIB)
    {
        // be able to acces MyTypeA, MyTypeB & MyTypeC from varEIA
        // be able to acces MyTypeD, MyTypeE & MyTypeF from varEIB
    }
}

質問:

最終的に私が達成しようとしているのは、場合によっては で利用MyTypeA可能になり、別の場合では で利用できるようになることです。現在の構造を考えると、これを達成する方法はありますか?MyTypeBMyTypeCComparisonManagerMyTypeDMyTypeEMyTypeFComparisonManager

4

2 に答える 2

1

どうしてこんな風にしないの?

public class ComparisonManager
{
    public ComparisonManager(IA varEIA, IB varEIB) {}
}

于 2012-08-30T15:37:59.567 に答える
1

解決策は次のとおりであることがわかりました。

public class ComparisonManager<T>
{
    private readonly T _diskServiceVm;
    private readonly T _panelServiceVm;

    public ComparisonManager(T diskServiceVm, T panelServiceVm)
    {
        _diskServiceVm = diskServiceVm;
        _panelServiceVm = panelServiceVm;
    }
}

実装:

if (/* circumstance A */)
{
    IA varIA = new A(varA, varB);
    IA varIB = new B(varA, varB);

    // this knows how to deal with MyTypeA, MyTypeB & MyTypeC
    var comparisonManager = new ComparisonManager<IA>(varIA , varIB);
}
else
{
    IB varIA = new A(varA, varB);
    IB varIB = new B(varA, varB);

    // this knows how to deal with MyTypeD, MyTypeE & MyTypeF
    var comparisonManager = new ComparisonManager<IB>(varIA , varIB);
}
于 2012-08-30T16:14:10.037 に答える