RT,
老的 fw 项目迁移 core 2.1,其中有一个 Instance的实现类, 大概贴一下代码:
var builder = new ContainerBuilder();
ConfigurationSettingsReader reader = new ConfigurationSettingsReader("autofac");
SectionHandler handler = reader.SectionHandler;
var element = handler.Components.FirstOrDefault(item => item.Service.Contains(typeof(T).FullName));
Autofac.IContainer container = null;
T t;
if (element == null)//配置文件中未配置,采用默认注册
{
//此处省去一大段
}
else
{
builder.RegisterType<T>();
builder.RegisterModule(reader);
}
container = builder.Build();
t = container.Resolve<T>();
return t;
泛型T是定义在类上边的 (public class Instance<T> where T : IService),大概意图就是,如果读取到配置文件中的匹配类型,那么就用配置文件的实现类去实例化对象并返回,否则就去根据各种类名什么的去按命名规则去拼出实现类。
那么问题就是, 最新版本的Autofac 已经没有ConfigurationSettingsReader了,那么类似的方法要怎么实现,core 中 已经都是 json文件单独去定义 autofac的配置了, 或者说,我在startup 里边已经注入了实现,那么在这个工具类的程序集里边,怎么显示的去拿到 Resolve<T> 的对象呢? 这个写法是要怎么写,或者说 startup里的 container 在其他程序集中如何取到?