使用Autofac进行非注册类型初始化

Car*_* G. 1 c# dependency-injection autofac

我有一个库,它可以构建在运行时动态发现的类型实例(所有公共和非抽象)(使用反射).

要构建这些实例,我想使用Autofac(虽然我愿意使用其他框架),以便自动合并依赖项.

问题是Autofac没有创建实例.如果我使用scope.Resolve()它会抛出一个异常,说明该类型未注册(由于它是在运行时动态发现的,因此不能注册).如果我尝试使用scope.ResolveOptional()它只返回null.

我已经将它用于仅具有默认公共构造函数的类型和具有依赖性且两者都失败的类型.

编辑:添加代码.types数组中返回的类型都是具有默认无参数构造函数的公共类型.

var types = AppDomain.CurrentDomain.GetAssemblies()
                                   .SelectMany(s => s.GetTypes())
                                   .Where(p => typeof(ISomeInterface).IsAssignableFrom(p) 
                                               && !p.IsAbstract
                                               && p.IsPublic).ToArray();

var instance = (ISomeInterface)_dependencyInjectionScope.Resolve(type);
Run Code Online (Sandbox Code Playgroud)

编辑2:关于一些评论,是的我知道这些类型没有事先注册,但这是因为在调用此代码时容器已经完全构建.我正在寻找它是否有办法(毕竟我提供的Autofac具有既具体又可构造的类型)

And*_*air 9

你最终在寻找注册资源吗?如果是这样,请参阅AnyConcreteTypeNotAlreadyRegisteredSource:

var builder = new ContainerBuilder();
builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
var container = builder.Build();
Run Code Online (Sandbox Code Playgroud)