を発行し、私はIServiceHandler
とISalesHandler
を持っているとの両方がIhandler
インターフェイスの継承が
IHandler.cs
public interface IHandler
{
Task AddAsync(IEnumerable<IDictionary<string, object>> toAdd, int dataFileId);
Task AddAuditAsync(IEnumerable<IDictionary<string, object>> toAdd, int dataFileId);
}
から継承IServiceHandler.cs
public interface IServiceHandler : IHandler
{
Task<IEnumerable<ACService>> GetAsync();
Task<IEnumerable<ACServiceAudit>> GetAuditAsync();
}
ISalesHandler.cs
public interface ISalesHandler : IHandler
{
Task<IEnumerable<ACSale>> GetAsync();
Task<IEnumerable<ACSaleAudit>> GetAuditAsync();
}
それから私はセールスやサービスのいずれかを返しますが、問題は、私はIHandler
私だけを引き起こし
private IHandler CreateHandler(FileType type)
{
switch (type)
{
case FileType.Sales:
return _container.GetExportedValue<ISalesHandler>("Sales");
case FileType.Service:
return _container.GetExportedValue<IServiceHandler>("Service");
case FileType.None:
return null;
}
return null;
}
としてそれを返すいた方法を持っていますIHandler
のメソッドにアクセスし、IServiceHandler
またはISalesHandler
にはアクセスしません。
すべてのメソッドにアクセスできるようにインターフェイスを構成するにはどうすればよいですか?私はCreateHandler
メソッドを保つことを好むでしょう。
どのようにコンパイラが返されることになるだろうされたタイプを知ることを期待しますか? 'CreateHandler(FileType.Sales)'を呼び出すと、コンパイラはメソッド本体を調べず、 'ISalesHandler'を返すので、GetAsyncは' Task> 'を返します。基本的に、コンパイル時の情報と実行時の情報を区別する必要があります。「CreateHandler」のパラメータの値は実行時の情報なので、コンパイル時の情報には影響しません。 –
おそらく、インターフェイスとCreateHandlerの両方のメソッドを汎用化する方が良いでしょう。そして、switch文を使わずに、必要なものを取り戻すことができます。 – Baldrick
Createhandlerメソッドに型パラメータを渡すか(ISHviceHandlerとしてのIHandler) –