microsoft/teams.net

Public

mirrored from https://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
v2.0.0-preview.6

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

Libraries/Microsoft.Teams.Extensions/Microsoft.Teams.Extensions.Hosting/Microsoft.Teams.Apps.Extensions/ServiceCollection.cs

133lines · modecode

1using Microsoft.Extensions.DependencyInjection;
2using Microsoft.Extensions.Logging;
3using Microsoft.Teams.Apps.Plugins;
4using Microsoft.Teams.Extensions.Logging;
5
6namespace Microsoft.Teams.Apps.Extensions;
7
8public static class ServiceCollectionExtensions
9{
10 public static IServiceCollection AddTeams(this IServiceCollection collection)
11 {
12 collection.AddSingleton<Common.Logging.ConsoleLogger>();
13 collection.AddSingleton<Common.Logging.ILogger, Common.Logging.ConsoleLogger>(provider => provider.GetRequiredService<Common.Logging.ConsoleLogger>());
14 collection.AddSingleton<Common.Storage.LocalStorage<object>>();
15 collection.AddSingleton<Common.Storage.IStorage<string, object>>(provider => provider.GetRequiredService<Common.Storage.LocalStorage<object>>());
16
17 collection.AddSingleton<TeamsLogger>();
18 collection.AddSingleton<ILogger, TeamsLogger>(provider => provider.GetRequiredService<TeamsLogger>());
19 collection.AddSingleton<ILoggerFactory, LoggerFactory>(provider =>
20 {
21 var logger = provider.GetRequiredService<TeamsLogger>();
22 return new LoggerFactory([new TeamsLoggerProvider(logger)]);
23 });
24
25 collection.AddSingleton(provider =>
26 {
27 var settings = provider.GetRequiredService<TeamsSettings>();
28 var logger = provider.GetRequiredService<Common.Logging.ILogger>();
29 return App.Builder(settings.Apply()).AddLogger(logger).Build();
30 });
31
32 collection.AddHostedService<TeamsService>();
33 collection.AddScoped<TeamsContext>();
34 collection.AddTransient(provider => provider.GetRequiredService<TeamsContext>().Activity);
35 return collection;
36 }
37
38 public static IServiceCollection AddTeams(this IServiceCollection collection, AppOptions options)
39 {
40 var app = new App(options);
41 var log = new TeamsLogger(app.Logger);
42
43 collection.AddSingleton(app.Logger);
44 collection.AddSingleton(app.Storage);
45 collection.AddSingleton<ILoggerFactory>(_ => new LoggerFactory([new TeamsLoggerProvider(log)]));
46 collection.AddSingleton<ILogger>(log);
47 collection.AddSingleton(app);
48 collection.AddHostedService<TeamsService>();
49 collection.AddScoped<TeamsContext>();
50 collection.AddTransient(provider => provider.GetRequiredService<TeamsContext>().Activity);
51 return collection;
52 }
53
54 public static IServiceCollection AddTeams(this IServiceCollection collection, AppBuilder builder)
55 {
56 var app = builder.Build();
57 var log = new TeamsLogger(app.Logger);
58
59 collection.AddSingleton(app.Logger);
60 collection.AddSingleton(app.Storage);
61 collection.AddSingleton<ILoggerFactory, LoggerFactory>(_ => new LoggerFactory([new TeamsLoggerProvider(log)]));
62 collection.AddSingleton<ILogger>(log);
63 collection.AddSingleton(app);
64 collection.AddHostedService<TeamsService>();
65 collection.AddScoped<TeamsContext>();
66 collection.AddTransient(provider => provider.GetRequiredService<TeamsContext>().Activity);
67 return collection;
68 }
69
70 public static IServiceCollection AddTeams(this IServiceCollection collection, App app)
71 {
72 var log = new TeamsLogger(app.Logger);
73
74 collection.AddSingleton(app.Logger);
75 collection.AddSingleton(app.Storage);
76 collection.AddSingleton<ILoggerFactory, LoggerFactory>(_ => new LoggerFactory([new TeamsLoggerProvider(log)]));
77 collection.AddSingleton<ILogger>(log);
78 collection.AddSingleton(app);
79 collection.AddHostedService<TeamsService>();
80 collection.AddScoped<TeamsContext>();
81 collection.AddTransient(provider => provider.GetRequiredService<TeamsContext>().Activity);
82 return collection;
83 }
84
85 public static IServiceCollection AddTeams(this IServiceCollection collection, Func<IServiceProvider, App> factory)
86 {
87 collection.AddSingleton(provider => provider.GetRequiredService<Common.Logging.ILogger>());
88 collection.AddSingleton<ILoggerFactory, LoggerFactory>();
89 collection.AddSingleton<ILogger, TeamsLogger>(provider => provider.GetRequiredService<TeamsLogger>());
90 collection.AddHostedService<TeamsService>();
91 collection.AddScoped<TeamsContext>();
92 collection.AddTransient(provider => provider.GetRequiredService<TeamsContext>().Activity);
93 collection.AddSingleton(factory);
94 collection.AddSingleton(provider => provider.GetRequiredService<App>().Logger);
95 collection.AddSingleton(provider => provider.GetRequiredService<App>().Storage);
96 return collection;
97 }
98
99 public static IServiceCollection AddTeams(this IServiceCollection collection, Func<IServiceProvider, Task<App>> factory)
100 {
101 collection.AddSingleton(provider => provider.GetRequiredService<Common.Logging.ILogger>());
102 collection.AddSingleton<ILoggerFactory, LoggerFactory>();
103 collection.AddSingleton<ILogger, TeamsLogger>(provider => provider.GetRequiredService<TeamsLogger>());
104 collection.AddHostedService<TeamsService>();
105 collection.AddScoped<TeamsContext>();
106 collection.AddTransient(provider => provider.GetRequiredService<TeamsContext>().Activity);
107 collection.AddSingleton(provider => factory(provider).GetAwaiter().GetResult());
108 collection.AddSingleton(provider => provider.GetRequiredService<App>().Logger);
109 collection.AddSingleton(provider => provider.GetRequiredService<App>().Storage);
110 return collection;
111 }
112
113 public static IServiceCollection AddTeamsPlugin<TPlugin>(this IServiceCollection collection) where TPlugin : class, IPlugin
114 {
115 collection.AddSingleton<TPlugin>();
116 collection.AddSingleton<IPlugin, TPlugin>(provider => provider.GetRequiredService<TPlugin>());
117 return collection.AddHostedService<TeamsPluginService<TPlugin>>();
118 }
119
120 public static IServiceCollection AddTeamsPlugin<TPlugin>(this IServiceCollection collection, TPlugin plugin) where TPlugin : class, IPlugin
121 {
122 collection.AddSingleton(plugin);
123 collection.AddSingleton<IPlugin>(provider => provider.GetRequiredService<TPlugin>());
124 return collection.AddHostedService<TeamsPluginService<TPlugin>>();
125 }
126
127 public static IServiceCollection AddTeamsPlugin<TPlugin>(this IServiceCollection collection, Func<IServiceProvider, TPlugin> factory) where TPlugin : class, IPlugin
128 {
129 collection.AddSingleton(factory);
130 collection.AddSingleton<IPlugin, TPlugin>(factory);
131 return collection.AddHostedService<TeamsPluginService<TPlugin>>();
132 }
133}