Dreamine.MVVM.Core
1.0.13
중요: 자동 등록된 타입은 기본적으로 Singleton으로 등록됩니다. 따라서 자동 발견된 ViewModel, Model, Event, Manager는 애플리케이션이 별도 수명으로 명시 등록하지 않는 한 반복 해석 시 동일 인스턴스를 유지합니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
AutoRegistrationService.cs
이 파일의 문서화 페이지로 가기
1
using
System;
2
using
System.Linq;
3
using
System.Reflection;
4
using
Dreamine.MVVM.Interfaces.DependencyInjection;
5
6
namespace
Dreamine.MVVM.Core.AutoRegistration
7
{
16
public
sealed
class
AutoRegistrationService
: IAutoRegistrationService
17
{
26
private
readonly IAssemblyTypeScanner
_typeScanner
;
35
private
readonly IAutoRegistrationFilter
_filter
;
36
69
public
AutoRegistrationService
(
70
IAssemblyTypeScanner typeScanner,
71
IAutoRegistrationFilter filter)
72
{
73
_typeScanner
= typeScanner ??
throw
new
ArgumentNullException(nameof(typeScanner));
74
_filter
= filter ??
throw
new
ArgumentNullException(nameof(filter));
75
}
76
109
public
void
RegisterAll
(Assembly rootAssembly, IServiceRegistry registry)
110
{
111
if
(rootAssembly is
null
)
112
{
113
throw
new
ArgumentNullException(nameof(rootAssembly));
114
}
115
116
if
(registry is
null
)
117
{
118
throw
new
ArgumentNullException(nameof(registry));
119
}
120
121
foreach
(Assembly assembly
in
_typeScanner
.GetCandidateAssemblies(rootAssembly))
122
{
123
RegisterAssemblyTypes
(assembly, registry);
124
}
125
}
126
151
private
void
RegisterAssemblyTypes
(Assembly assembly, IServiceRegistry registry)
152
{
153
foreach
(Type type
in
_typeScanner
.GetLoadableTypes(assembly))
154
{
155
RegisterType
(type, registry);
156
}
157
}
158
183
private
void
RegisterType
(Type type, IServiceRegistry registry)
184
{
185
if
(!
_filter
.IsTarget(type))
186
{
187
return
;
188
}
189
190
if
(registry.IsRegistered(type))
191
{
192
return
;
193
}
194
195
RegisterSingletonByReflection
(type, registry);
196
}
197
222
private
static
void
RegisterSingletonByReflection
(Type implementationType, IServiceRegistry registry)
223
{
224
MethodInfo registerMethod = typeof(IServiceRegistry)
225
.GetMethods()
226
.Single(method =>
227
method.Name == nameof(IServiceRegistry.RegisterSingleton) &&
228
method.IsGenericMethodDefinition &&
229
method.GetGenericArguments().Length == 1 &&
230
method.GetParameters().Length == 0);
231
232
MethodInfo closedMethod = registerMethod.MakeGenericMethod(implementationType);
233
234
closedMethod.Invoke(registry,
null
);
235
}
236
}
237
}
Dreamine.MVVM.Core.AutoRegistration
Definition
AssemblyTypeScanner.cs:8
Dreamine.MVVM.Core.AutoRegistration.AutoRegistrationService.AutoRegistrationService
AutoRegistrationService(IAssemblyTypeScanner typeScanner, IAutoRegistrationFilter filter)
Definition
AutoRegistrationService.cs:69
Dreamine.MVVM.Core.AutoRegistration.AutoRegistrationService._filter
readonly IAutoRegistrationFilter _filter
Definition
AutoRegistrationService.cs:35
Dreamine.MVVM.Core.AutoRegistration.AutoRegistrationService.RegisterAssemblyTypes
void RegisterAssemblyTypes(Assembly assembly, IServiceRegistry registry)
Definition
AutoRegistrationService.cs:151
Dreamine.MVVM.Core.AutoRegistration.AutoRegistrationService.RegisterType
void RegisterType(Type type, IServiceRegistry registry)
Definition
AutoRegistrationService.cs:183
Dreamine.MVVM.Core.AutoRegistration.AutoRegistrationService._typeScanner
readonly IAssemblyTypeScanner _typeScanner
Definition
AutoRegistrationService.cs:26
Dreamine.MVVM.Core.AutoRegistration.AutoRegistrationService.RegisterAll
void RegisterAll(Assembly rootAssembly, IServiceRegistry registry)
Definition
AutoRegistrationService.cs:109
Dreamine.MVVM.Core.AutoRegistration.AutoRegistrationService.RegisterSingletonByReflection
static void RegisterSingletonByReflection(Type implementationType, IServiceRegistry registry)
Definition
AutoRegistrationService.cs:222
AutoRegistration
AutoRegistrationService.cs
다음에 의해 생성됨 :
1.17.0