1

どのエンティティにも対応しない追加のリポジトリが必要な場合に、リポジトリ パターンを使用する状況があります。

たとえば、次のようになります。

 public class TargetRepository : RepositoryBase<Target>, ITargetRepository
{
    public TargetRepository(IDatabaseFactory databaseFactory)
        :base(databaseFactory)
    {
    }

            public IEnumerable<Target>  GetValidTargets(){ ... }
}
public interface ITargetRepository : IRepository<Target>
{
            IEnumerable<Target>  GetValidTargets();
}

Targetエンティティはどこにありますか。

次に、次のような他のリポジトリが必要です。

  public class ScatterPlotRepositoryProxy : TargetRepository, IScatterPlotRepositoryProxy
{
    public ScatterPlotRepositoryProxy(IDatabaseFactory databaseFactory)
        :base(databaseFactory)
    { }

            public IEnumerable<ScatterPlotModel> GetSavedScatterPlots() {
                   this.GetValidTargets().Select(t => new ScatterPlotModel{ ... });
            }
}

public interface IScatterPlotRepositoryProxy
{
         IEnumerable<ScatterPlotModel> GetSavedScatterPlots()
}

TargetRepositoryこれがどのようにnotから継承されているかに注目してくださいRepositoryBase<Entity>。これScatterPlotModelは、エンティティではなく、永続化されていないためです。TargetRespositoryただし、すべての異なるチャート タイプのメソッドで煩雑にならないように、別の分離レイヤーが必要です。

私は実際にこれをまだ実装していないので、まだエラーはありません。しかし、私の Autofac DI 呼び出しが後で問題を引き起こすことが予想されるので、事前に尋ねておきます。

これらの「リポジトリプロキシ」をAutofacに正しく登録するにはどうすればよいですか? 現在、私はこれを持っています:

builder.RegisterAssemblyTypes(typeof(TargetRepository ).Assembly).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces().InstancePerApiRequest();

そして、これを追加すると競合するようです:

 builder.RegisterAssemblyTypes(typeof(TargetRepository ).Assembly).Where(t => t.Name.EndsWith("RepositoryProxy")).AsImplementedInterfaces().InstancePerHttpRequest();

期待どおりの動作が得られますか (ベース リポジトリからも実装しているにもかかわらず、解決され、IScatterPlotRepositoryProxy解決さScatterPlotRepositoryProxyITargetRepository続ける必要があります)?TargetRepositoryScatterPlotRepositoryProxy

リポジトリごとに行を追加する必要がないように、アセンブリからすべてをワンショットで実行しようとしています。

4

1 に答える 1