どのエンティティにも対応しない追加のリポジトリが必要な場合に、リポジトリ パターンを使用する状況があります。
たとえば、次のようになります。
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
解決さScatterPlotRepositoryProxy
れITargetRepository
続ける必要があります)?TargetRepository
ScatterPlotRepositoryProxy
リポジトリごとに行を追加する必要がないように、アセンブリからすべてをワンショットで実行しようとしています。