美文网首页
IServiceCollection根据类型名称获取对象

IServiceCollection根据类型名称获取对象

作者: 寻找无名的特质 | 来源:发表于2021-08-16 05:31 被阅读0次

问题的提出:针对一个接口,有多个实现,我们希望注册这多个实现,在使用时根据实现的类型名称获取具体的实现对象。
在注册时,可以根据类型所在的动态库和名称进行注册:

                var assemblyPath = Path.Combine(basePath, p.AssemblyName);
                if (!assemblyPath.EndsWith(".dll")) assemblyPath += ".dll";
                var typeName = p.ClassName;
                var assembly = Assembly.LoadFrom(assemblyPath);
                var loggerType = assembly.GetType(typeName);
                services.AddScoped(loggerType);

在获取时,可以使用IServiceProvider的GetService获取:

            var p = dbOption.Providers.Find(o => o.ProviderName == providerName);
            var assemblyPath = Path.Combine(contextOption.Basepath, p.AssemblyName);
            if (!assemblyPath.EndsWith(".dll")) assemblyPath += ".dll";
            var typeName = p.ClassName;
            var assembly = Assembly.LoadFrom(assemblyPath);
            var loggerType = assembly.GetType(typeName);
            return provider.GetService(loggerType) as IDataAccess;

这样就可以了。

相关文章

网友评论

      本文标题:IServiceCollection根据类型名称获取对象

      本文链接:https://www.haomeiwen.com/subject/kbhdbltx.html