Dreamine.MVVM.Core 1.0.13
중요: 자동 등록된 타입은 기본적으로 Singleton으로 등록됩니다. 따라서 자동 발견된 ViewModel, Model, Event, Manager는 애플리케이션이 별도 수명으로 명시 등록하지 않는 한 반복 해석 시 동일 인스턴스를 유지합니다.
로딩중...
검색중...
일치하는것 없음
ConstructorActivator.cs
이 파일의 문서화 페이지로 가기
1using System;
2using System.Linq;
3using Dreamine.MVVM.Interfaces.DependencyInjection;
4
6{
15 public sealed class ConstructorActivator : IObjectActivator
16 {
25 private readonly IConstructorSelector _constructorSelector;
26
51 public ConstructorActivator(IConstructorSelector constructorSelector)
52 {
53 _constructorSelector = constructorSelector
54 ?? throw new ArgumentNullException(nameof(constructorSelector));
55 }
56
105 public object CreateInstance(Type implementationType, IServiceResolver resolver)
106 {
107 if (implementationType is null)
108 {
109 throw new ArgumentNullException(nameof(implementationType));
110 }
111
112 if (resolver is null)
113 {
114 throw new ArgumentNullException(nameof(resolver));
115 }
116
117 var constructor = _constructorSelector.SelectConstructor(implementationType);
118
119 object[] arguments = constructor
120 .GetParameters()
121 .Select(parameter => resolver.Resolve(parameter.ParameterType))
122 .ToArray();
123
124 return Activator.CreateInstance(implementationType, arguments)
125 ?? throw new InvalidOperationException(
126 $"Failed to create instance of [{implementationType.FullName}].");
127 }
128 }
129}
object CreateInstance(Type implementationType, IServiceResolver resolver)
ConstructorActivator(IConstructorSelector constructorSelector)