/
ServiceProviderDependencyResolver.cs
62 lines (51 loc) · 2.04 KB
/
ServiceProviderDependencyResolver.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
// //-----------------------------------------------------------------------
// // <copyright file="ServiceProviderDependencyResolver.cs" company="Akka.NET Project">
// // Copyright (C) 2009-2021 Lightbend Inc. <http://www.lightbend.com>
// // Copyright (C) 2013-2021 .NET Foundation <https://github.com/akkadotnet/akka.net>
// // </copyright>
// //-----------------------------------------------------------------------
using System;
using Akka.Actor;
using Microsoft.Extensions.DependencyInjection;
namespace Akka.DependencyInjection
{
/// <summary>
/// INTERNAL API.
///
/// <see cref="IDependencyResolver"/> implementation backed by <see cref="IServiceProvider"/>
/// </summary>
public class ServiceProviderDependencyResolver : IDependencyResolver
{
public IServiceProvider ServiceProvider { get; }
public ServiceProviderDependencyResolver(IServiceProvider serviceProvider)
{
ServiceProvider = serviceProvider;
}
public IResolverScope CreateScope()
{
return new ServiceProviderScope(ServiceProvider.CreateScope());
}
public T GetService<T>()
{
return ServiceProvider.GetService<T>();
}
public object GetService(Type type)
{
return ServiceProvider.GetService(type);
}
public Props Props(Type type, params object[] args)
{
if(typeof(ActorBase).IsAssignableFrom(type))
return Akka.Actor.Props.CreateBy(new ServiceProviderActorProducer(ServiceProvider, type, args));
throw new ArgumentException(nameof(type), $"[{type}] does not implement Akka.Actor.ActorBase.");
}
public Props Props(Type type)
{
return Props(type, Array.Empty<object>());
}
public Props Props<T>(params object[] args) where T : ActorBase
{
return Akka.Actor.Props.CreateBy(new ServiceProviderActorProducer<T>(ServiceProvider, args));
}
}
}