我有一个Web应用程序,我正在使用Autofac进行引导,并且来自公共库的依赖项被注入到控制器过滤器等中。其中一些依赖项是开放式泛型,这一切都正常。
在我的网络引导程序中,我这样做;
var builder = new ContainerBuilder();
builder.RegisterGeneric(typeof(OpenGeneric<>)).As(typeof(IOpenGeneric<>));
我现在需要创建一个可扩展的应用程序(通过插件),它将消耗一些相同的依赖项。我正在使用MEF编写应用程序和扩展发现,并使用Autofac.Integration.Mef nuget包将其连接到Autofac:
builder.RegisterComposablePartCatalog(catalog);
我发现我的依赖关系在它们是通用依赖项时没有被注入(其他接口和具体类型都很好),除非我明确地提供这样的泛型类型:
builder.RegisterType<OpenGeneric<User>>().As<IOpenGeneric<User>>().Exported(x => x.As<IOpenGeneric<User>>());
我真的不想提供满足约束条件的每种类型。
有可能这样做吗? 我知道MEF本身并不支持开放式泛型,但我认为使用Autofac集成可以实现这一点。