如何在.NET Core控制台应用程序中使用Microsoft.Extensions.DependencyInjection?

TLD*_*LDR 3 c# dependency-injection console-application xamarin .net-core

我有一个要在.NET Core支持的所有平台(Xamarin,Windows,Mac)上运行的库。为此,我需要一个跨平台的DI来处理特定于平台的自定义项,例如存储,安全性等。

我见过的所有示例都Microsoft.Extensions.DependencyInjection包含ASP.NET Core的代码。控制台应用程序是否存在任何等效/受支持的方案?

另外(理想情况下),我希望用于控制台的DI框架适用于ASP.NET Core,Xamarin和Win32

错误示例

将此代码用作.NET Core应用程序的基础。看来ServiceCollection应该是公共的,但是当我在Mac上使用Xamarin时,IServiceCollection缺少(ServiceCollection)的默认实现:

在此处输入图片说明

zai*_*man 6

我基本上像这样使用它:

安装nuget Microsoft.Extensions.DependencyInjection

然后在Program.cs中

using Microsoft.Extensions.DependencyInjection;

 public class Program
    {
        public static void Main(string[] args)
        {

            var services = new ServiceCollection()
                .AddSingleton<WhateverType>(new WhateverType());

            var serviceProvider = services.BuildServiceProvider();


            serviceProvider.GetService<WhateverType>().DoWork();
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 您不需要编写 DoWork() 方法。 (2认同)
  • serviceProvider 应包装到“using”块中才能正确处置 (2认同)
  • @zaitsman 当然,在这个例子中完全不需要。但一般来说,如果服务提供者未被处置,它可能不会处置它创建的对象。如果您使用多个服务提供商或者服务提供商的生命周期与应用程序生命周期不同,就会出现这种情况。我的评论是在控制台/桌面应用程序中使用 DI 的一般评论。 (2认同)