请问关于c的具体应用场景有哪些?

2026-04-29 03:372阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计597个文字,预计阅读时间需要3分钟。

请问关于c的具体应用场景有哪些?

我正在创建一个自定义的.NET Core ILoggerProvider,它需要将一些依赖项传递给其构造函数。我相信我使用了一种常见的模式来初始化我的日志记录实现;它看起来像这样:var services=new ServiceCollection();

我正在创建一个自定义的.NET Core ILoggerProvider,它需要将一些依赖项传递给它的构造函数.

我相信我使用一种相当常见的模式来初始化我的日志记录实现;它看起来像这样:

var services = new ServiceCollection(); // Register some services here services.AddLogging(builder => { builder.AddProvider(new DebugLoggerProvider()); }); var provider = services.BuildServiceProvider();

我想在AddLogging块中添加我的新提供程序,就像当前添加DebugLoggerProvider一样.

请问关于c的具体应用场景有哪些?

我的自定义提供程序需要将一些其他服务传递给它的构造函数,因为这些服务已经在ServiceCollection中注册,我假设我应该能够引用它们.但是,与AddSingleton等具有暴露IServiceProvider的重载的方法不同,AddLogging似乎不提供等价物.

有没有一种简单的方法来实现这一点,或者我是否尝试做一些与.NET Core日志设计部署方式相矛盾的事情?

更新:

在尝试了@Nkosi提出的建议之后,我可以确认通过绕过AddLogging并直接实现其内部实现,可以使其工作,如下所示:

var services = new ServiceCollection(); // Register some services services.AddSingleton<IMyService, MyService>(); // Initialize logging services.AddOptions(); services.AddSingleton<ILoggerFactory, LoggerFactory>(); services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); services.AddSingleton<ILoggerProvider>(p => new DebugLoggerProvider()); services.AddSingleton<ILoggerProvider>(p => new MyLoggerProvider("Constant value", p.GetService<IMyService>())); var provider = services.BuildServiceProvider(); 现在我不确定是否已经存在扩展但是我在这里看到了潜力.

首先,这是在源代码仓库中定义AddProvider的方式.

public static ILoggingBuilder AddProvider(this ILoggingBuilder builder, ILoggerProvider provider) { builder.Services.AddSingleton(provider); return builder; }

您可以通过制作自己的通用版本来构建它

public static class MyLoggingBuilderExtensions { public static ILoggingBuilder AddProvider<T>(this ILoggingBuilder builder) where T: class, ILoggerProvider{ builder.Services.AddSingleton<ILoggerProvider, T>(); return builder; } }

这应该允许DI容器在解析时建立对象图

services.AddLogging(builder => { builder.AddProvider<CustomLoggerProvider>(); });

并且还有扩展此功能的空间,例如添加自己的重载,公开IServiceProvider并将其传递给扩展中的AddSingleton.

public static ILoggingBuilder AddProvider<T>(this ILoggingBuilder builder, Func<IServiceProvider, T> factory) where T: class, ILoggerProvider { builder.Services.AddSingleton<ILoggerProvider, T>(factory); return builder; }

并使用

services.AddLogging(builder => { builder.AddProvider<CustomLoggerProvider>(p => new CustomLoggerProvider("Constant value", p.GetService<IMyService>())); });

本文共计597个文字,预计阅读时间需要3分钟。

请问关于c的具体应用场景有哪些?

我正在创建一个自定义的.NET Core ILoggerProvider,它需要将一些依赖项传递给其构造函数。我相信我使用了一种常见的模式来初始化我的日志记录实现;它看起来像这样:var services=new ServiceCollection();

我正在创建一个自定义的.NET Core ILoggerProvider,它需要将一些依赖项传递给它的构造函数.

我相信我使用一种相当常见的模式来初始化我的日志记录实现;它看起来像这样:

var services = new ServiceCollection(); // Register some services here services.AddLogging(builder => { builder.AddProvider(new DebugLoggerProvider()); }); var provider = services.BuildServiceProvider();

我想在AddLogging块中添加我的新提供程序,就像当前添加DebugLoggerProvider一样.

请问关于c的具体应用场景有哪些?

我的自定义提供程序需要将一些其他服务传递给它的构造函数,因为这些服务已经在ServiceCollection中注册,我假设我应该能够引用它们.但是,与AddSingleton等具有暴露IServiceProvider的重载的方法不同,AddLogging似乎不提供等价物.

有没有一种简单的方法来实现这一点,或者我是否尝试做一些与.NET Core日志设计部署方式相矛盾的事情?

更新:

在尝试了@Nkosi提出的建议之后,我可以确认通过绕过AddLogging并直接实现其内部实现,可以使其工作,如下所示:

var services = new ServiceCollection(); // Register some services services.AddSingleton<IMyService, MyService>(); // Initialize logging services.AddOptions(); services.AddSingleton<ILoggerFactory, LoggerFactory>(); services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); services.AddSingleton<ILoggerProvider>(p => new DebugLoggerProvider()); services.AddSingleton<ILoggerProvider>(p => new MyLoggerProvider("Constant value", p.GetService<IMyService>())); var provider = services.BuildServiceProvider(); 现在我不确定是否已经存在扩展但是我在这里看到了潜力.

首先,这是在源代码仓库中定义AddProvider的方式.

public static ILoggingBuilder AddProvider(this ILoggingBuilder builder, ILoggerProvider provider) { builder.Services.AddSingleton(provider); return builder; }

您可以通过制作自己的通用版本来构建它

public static class MyLoggingBuilderExtensions { public static ILoggingBuilder AddProvider<T>(this ILoggingBuilder builder) where T: class, ILoggerProvider{ builder.Services.AddSingleton<ILoggerProvider, T>(); return builder; } }

这应该允许DI容器在解析时建立对象图

services.AddLogging(builder => { builder.AddProvider<CustomLoggerProvider>(); });

并且还有扩展此功能的空间,例如添加自己的重载,公开IServiceProvider并将其传递给扩展中的AddSingleton.

public static ILoggingBuilder AddProvider<T>(this ILoggingBuilder builder, Func<IServiceProvider, T> factory) where T: class, ILoggerProvider { builder.Services.AddSingleton<ILoggerProvider, T>(factory); return builder; }

并使用

services.AddLogging(builder => { builder.AddProvider<CustomLoggerProvider>(p => new CustomLoggerProvider("Constant value", p.GetService<IMyService>())); });