.net 库作者如何将ILogger公开给库用户

m4pnthwp  于 2023-04-13  发布在  .NET
关注(0)|答案(1)|浏览(129)

我创建了一个内部使用ILogger的库,在注册库时,我使用了类似于下面的代码:_ = service.AddMyLibrary(logger);
我还尝试了_= service.AddMyLibrary(myLoggerFactory),但如果注入了ILoggerFactory,情况也是类似的。
但是,如果库的用户想在一个文件中记录他的应用程序的错误,而在另一个文件中记录我的库的错误(他也使用ILogger),该怎么办?
什么是最佳实践?我应该使用IMyLibraryLogger接口并公开它吗?
问题是,如果解决了依赖关系,那么只有一个ILogger的实现会被解决,所有的日志都会在“MyApp.txt”或“MyLibrary.txt”中结束,实际上它们应该是分开的。

u3r8eeie

u3r8eeie1#

您可以使用类似TryAddScoped的东西,这样,如果已经有另一个服务为该类型注册,则不会添加日志记录器。

public static class ServiceCollectionExtensions
{
    public static void AddMyLibrary(this IServiceCollection services)
    {
        services.TryAddScoped<ILogger,MyAppILogger>();
        //Also inject this to allow directlyc consuming your logger
        services.AddScoped<MyAppILogger>();

    }
}

你也可以添加第二行,这样用户就可以在确定需要的时候调用你的类型。

相关问题