如何使用Asp.Net Core Dependency注入导出接口

时间:2016-08-21 10:19:28

标签: dependency-injection asp.net-core

在MEF中,我可以使用以下代码导出通用接口:

registration.ForTypesMatching(t => t.GetInterface(typeof(ICommandHandler<>).Name) != null)
    .ExportInterfaces().SetCreationPolicy(CreationPolicy.NonShared);

如何在Asp.Net Core中配置服务以实现相同的功能,即仅通过接口注册服务类?

2 个答案:

答案 0 :(得分:0)

ASP.NET Core提供了自己的由IServiceProvider接口表示的Inversion of Control容器。 有关基本用法以及如何注册自己的课程,请查看此页面:https://docs.asp.net/en/latest/fundamentals/dependency-injection.html#

答案 1 :(得分:0)

在ASP.NET Core应用程序中,您可以通过扩展Startup.cs方法在Startup.ConfigureServices中配置服务。 IServiceCollection实例的services参数允许您添加自己的实现接口的服务。

<强> Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    // setup of ASP.NET Services like MVC
    ...

    services.AddSingleton<IMyInterface>(objectImplementingMyInterface);
    services.AddTransient<IAnotherInterface, SomeAnotherInterfaceImplementer>();

}

如果内置DI容器(https://docs.asp.net/en/latest/fundamentals/dependency-injection.html)的基本功能不符合您的要求,那么也有办法合并其他DI容器库。一个例子是Autofac(http://docs.autofac.org/en/latest/integration/aspnetcore.html)。 ASP.NET团队目前正在进行更改,使DI库维护者更容易集成到ASP.NET Core中。