-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathAppController.cs
76 lines (63 loc) · 2.45 KB
/
AppController.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using System;
using ImageProcessing.Microkernel.DIAdapter.Adapters.Interface;
using ImageProcessing.Microkernel.MVP.Aggregator.Implementation;
using ImageProcessing.Microkernel.MVP.Aggregator.Interface;
using ImageProcessing.Microkernel.MVP.Controller.Interface;
using ImageProcessing.Microkernel.MVP.IoC.Implementation;
using ImageProcessing.Microkernel.MVP.IoC.Interface;
using ImageProcessing.Microkernel.MVP.Presenter.Interface;
namespace ImageProcessing.Microkernel.MVP.Controller.Implementation
{
/// <inheritdoc cref="IAppController"/>
public class AppController : IAppController
{
private static AppController? _controller;
public static AppController Controller
{
get => _controller ?? throw new ArgumentNullException(nameof(_controller));
private set => _controller = value;
}
private AppController()
{
}
/// <inheritdoc/>
public IComponentProvider IoC { get; }
/// <inheritdoc/>
public IEventAggregator Aggregator { get; private set; }
/// It is declared with the internal to restrict a client
/// to create an instance from the application side.
internal AppController(IContainer container)
{
IoC = new ComponentProvider(container);
IoC.RegisterSingletonInstance<IAppController>(Controller = this);
IoC.RegisterSingleton<IEventAggregator, EventAggregator>();
Aggregator = IoC.Resolve<IEventAggregator>();
}
/// <inheritdoc cref="IAppController.Run{TPresenter}"/>
public void Run<TPresenter>()
where TPresenter : class, IPresenter
{
if (!IoC.IsRegistered<TPresenter>())
{
IoC.RegisterTransient<TPresenter>();
}
IoC.Resolve<TPresenter>().Run();
}
/// <inheritdoc cref="IAppController.Run{TPresenter, TViewModel}(TViewModel)"/>
public void Run<TPresenter, TViewModel>(TViewModel vm)
where TPresenter : class, IPresenter<TViewModel>
where TViewModel : class
{
if (!IoC.IsRegistered<TPresenter>())
{
IoC.RegisterTransient<TPresenter>();
}
IoC.Resolve<TPresenter>().Run(vm);
}
/// <summary>
/// Dispose the specified <see cref="IoC"/>.
/// </summary>
public void Dispose()
=> IoC.Dispose();
}
}