使用Autofac和MEF集成解决开放式通用

时间:2013-11-24 12:12:30

标签: dependency-injection mef autofac

我有一个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集成可以实现这一点。

0 个答案:

没有答案