mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
Fixing circular dependencies
This commit is contained in:
parent
59e72b6dca
commit
c47a4b2e15
@ -7,6 +7,7 @@ using System.Threading.Tasks;
|
||||
using Kyoo.Models;
|
||||
using Kyoo.Models.Exceptions;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Kyoo.Controllers
|
||||
{
|
||||
@ -14,20 +15,20 @@ namespace Kyoo.Controllers
|
||||
{
|
||||
private readonly DatabaseContext _database;
|
||||
private readonly IProviderRepository _providers;
|
||||
private readonly IEpisodeRepository _episodes;
|
||||
private readonly Lazy<IEpisodeRepository> _episodes;
|
||||
private readonly IShowRepository _shows;
|
||||
protected override Expression<Func<Season, object>> DefaultSort => x => x.SeasonNumber;
|
||||
|
||||
|
||||
public SeasonRepository(DatabaseContext database,
|
||||
IProviderRepository providers,
|
||||
IEpisodeRepository episodes,
|
||||
IShowRepository shows)
|
||||
IShowRepository shows,
|
||||
IServiceProvider services)
|
||||
: base(database)
|
||||
{
|
||||
_database = database;
|
||||
_providers = providers;
|
||||
_episodes = episodes;
|
||||
_episodes = new Lazy<IEpisodeRepository>(services.GetRequiredService<IEpisodeRepository>);
|
||||
_shows = shows;
|
||||
}
|
||||
|
||||
@ -36,14 +37,16 @@ namespace Kyoo.Controllers
|
||||
{
|
||||
_database.Dispose();
|
||||
_providers.Dispose();
|
||||
_episodes.Dispose();
|
||||
if (_episodes.IsValueCreated)
|
||||
_episodes.Value.Dispose();
|
||||
}
|
||||
|
||||
public override async ValueTask DisposeAsync()
|
||||
{
|
||||
await _database.DisposeAsync();
|
||||
await _providers.DisposeAsync();
|
||||
await _episodes.DisposeAsync();
|
||||
if (_episodes.IsValueCreated)
|
||||
await _episodes.Value.DisposeAsync();
|
||||
}
|
||||
|
||||
public override Task<Season> Get(string slug)
|
||||
@ -161,7 +164,7 @@ namespace Kyoo.Controllers
|
||||
await _database.SaveChangesAsync();
|
||||
|
||||
if (obj.Episodes != null)
|
||||
await _episodes.DeleteRange(obj.Episodes);
|
||||
await _episodes.Value.DeleteRange(obj.Episodes);
|
||||
}
|
||||
}
|
||||
}
|
@ -6,6 +6,7 @@ using System.Threading.Tasks;
|
||||
using Kyoo.Models;
|
||||
using Kyoo.Models.Exceptions;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Kyoo.Controllers
|
||||
{
|
||||
@ -16,17 +17,16 @@ namespace Kyoo.Controllers
|
||||
private readonly IPeopleRepository _people;
|
||||
private readonly IGenreRepository _genres;
|
||||
private readonly IProviderRepository _providers;
|
||||
private readonly ISeasonRepository _seasons;
|
||||
private readonly IEpisodeRepository _episodes;
|
||||
private readonly Lazy<ISeasonRepository> _seasons;
|
||||
private readonly Lazy<IEpisodeRepository> _episodes;
|
||||
protected override Expression<Func<Show, object>> DefaultSort => x => x.Title;
|
||||
|
||||
public ShowRepository(DatabaseContext database,
|
||||
IStudioRepository studios,
|
||||
IPeopleRepository people,
|
||||
IGenreRepository genres,
|
||||
IProviderRepository providers,
|
||||
ISeasonRepository seasons,
|
||||
IEpisodeRepository episodes)
|
||||
IProviderRepository providers,
|
||||
IServiceProvider services)
|
||||
: base(database)
|
||||
{
|
||||
_database = database;
|
||||
@ -34,8 +34,8 @@ namespace Kyoo.Controllers
|
||||
_people = people;
|
||||
_genres = genres;
|
||||
_providers = providers;
|
||||
_seasons = seasons;
|
||||
_episodes = episodes;
|
||||
_seasons = new Lazy<ISeasonRepository>(services.GetRequiredService<ISeasonRepository>);
|
||||
_episodes = new Lazy<IEpisodeRepository>(services.GetRequiredService<IEpisodeRepository>);
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
@ -45,8 +45,10 @@ namespace Kyoo.Controllers
|
||||
_people.Dispose();
|
||||
_genres.Dispose();
|
||||
_providers.Dispose();
|
||||
_seasons.Dispose();
|
||||
_episodes.Dispose();
|
||||
if (_seasons.IsValueCreated)
|
||||
_seasons.Value.Dispose();
|
||||
if (_episodes.IsValueCreated)
|
||||
_episodes.Value.Dispose();
|
||||
}
|
||||
|
||||
public override async ValueTask DisposeAsync()
|
||||
@ -56,8 +58,10 @@ namespace Kyoo.Controllers
|
||||
await _people.DisposeAsync();
|
||||
await _genres.DisposeAsync();
|
||||
await _providers.DisposeAsync();
|
||||
await _seasons.DisposeAsync();
|
||||
await _episodes.DisposeAsync();
|
||||
if (_seasons.IsValueCreated)
|
||||
await _seasons.Value.DisposeAsync();
|
||||
if (_episodes.IsValueCreated)
|
||||
await _episodes.Value.DisposeAsync();
|
||||
}
|
||||
|
||||
public override async Task<ICollection<Show>> Search(string query)
|
||||
@ -168,15 +172,14 @@ namespace Kyoo.Controllers
|
||||
if (obj.LibraryLinks != null)
|
||||
foreach (LibraryLink entry in obj.LibraryLinks)
|
||||
_database.Entry(entry).State = EntityState.Deleted;
|
||||
|
||||
await _database.SaveChangesAsync();
|
||||
|
||||
// TODO fix circular references of Show/Season/Episode Repository.
|
||||
await _database.SaveChangesAsync();
|
||||
|
||||
if (obj.Seasons != null)
|
||||
await _seasons.DeleteRange(obj.Seasons);
|
||||
await _seasons.Value.DeleteRange(obj.Seasons);
|
||||
|
||||
if (obj.Episodes != null)
|
||||
await _episodes.DeleteRange(obj.Episodes);
|
||||
await _episodes.Value.DeleteRange(obj.Episodes);
|
||||
}
|
||||
}
|
||||
}
|
@ -133,16 +133,16 @@ namespace Kyoo
|
||||
});
|
||||
|
||||
|
||||
services.AddTransient<ILibraryRepository, LibraryRepository>();
|
||||
services.AddTransient<ICollectionRepository, CollectionRepository>();
|
||||
services.AddTransient<IShowRepository, ShowRepository>();
|
||||
services.AddTransient<ISeasonRepository, SeasonRepository>();
|
||||
services.AddTransient<IEpisodeRepository, EpisodeRepository>();
|
||||
services.AddTransient<ITrackRepository, TrackRepository>();
|
||||
services.AddTransient<IPeopleRepository, PeopleRepository>();
|
||||
services.AddTransient<IStudioRepository, StudioRepository>();
|
||||
services.AddTransient<IGenreRepository, GenreRepository>();
|
||||
services.AddTransient<IProviderRepository, ProviderRepository>();
|
||||
services.AddScoped<ILibraryRepository, LibraryRepository>();
|
||||
services.AddScoped<ICollectionRepository, CollectionRepository>();
|
||||
services.AddScoped<IShowRepository, ShowRepository>();
|
||||
services.AddScoped<ISeasonRepository, SeasonRepository>();
|
||||
services.AddScoped<IEpisodeRepository, EpisodeRepository>();
|
||||
services.AddScoped<ITrackRepository, TrackRepository>();
|
||||
services.AddScoped<IPeopleRepository, PeopleRepository>();
|
||||
services.AddScoped<IStudioRepository, StudioRepository>();
|
||||
services.AddScoped<IGenreRepository, GenreRepository>();
|
||||
services.AddScoped<IProviderRepository, ProviderRepository>();
|
||||
|
||||
services.AddScoped<ILibraryManager, LibraryManager>();
|
||||
services.AddSingleton<ITranscoder, Transcoder>();
|
||||
|
Loading…
x
Reference in New Issue
Block a user