如何在ASP.NET Web API 2中实现依赖项注入

时间:2018-07-08 12:23:12

标签: c# .net asp.net-web-api dependency-injection asp.net-web-api2

我想在我的.net Web api项目中使用此nuget包: https://github.com/Elfocrash/Cosmonaut/tree/885a98151be242516ec57cd94da1747b72588788

这个想法是从4.6.1的.net Web api中使用该nuget软件包的,但是该软件包的目标是netstandard2。所以我无法安装nuget软件包。

最后,我下载了源代码并在.net 4.6.1中创建了一个新的类库,它可以完美编译。

然后,我从.net Web api添加了对该库的引用。

但是我在serviceCollection上遇到问题,因为那里不存在。 如何使用serviceCollection?

// [Authorize]
    public class TenantController : ApiController
    {
        private  CosmosStoreSettings cosmosSettings;

        public TenantController()
        {

            cosmosSettings = new CosmosStoreSettings(ConfigurationManager.AppSettings["database"].ToString(), 
                ConfigurationManager.AppSettings["endpoint"].ToString(), 
                ConfigurationManager.AppSettings["authKey"].ToString());

            serviceCollection.AddCosmosStore<Book>(cosmosSettings);

        }
  

名称“ serviceCollection”在当前上下文中不存在

我确切地知道这意味着什么,但是我不确定如何在此项目上实施DI

2 个答案:

答案 0 :(得分:3)

您正在使用的库使用Microsoft.Extensions.DependencyInjection NuGet程序包,其中包含ASP.NET Core使用的依赖注入框架。尽管它不依赖于ASP.NET Core(甚至不依赖于.NET Core),但鉴于您使用的是ASP.NET Web API 2,我建议您保持简单,仅在ComosStore<T>附近创建一个工厂:

public static class CosmosStoreFactory 
{
    private static CosmosStoreSettings _settings = new CosmosStoreSettings("<<databaseName>>", "<<cosmosUri>>", "<<authkey>>");

    public static ICosmosStore<T> CreateForEntity<T>() where T: class
    {
         return new CosmosStore<T>(_settings);
    }
}

答案 1 :(得分:1)

我已经通过 WebAPI2 Get the GITHUB code here!实现了依赖项注入 只需下载应用程序并查看代码即可。这是一个非常简单的CRUD应用程序。请浏览README.md文件。

有几个可用的依赖项注入容器: 我使用了团结

添加团结的步骤。 1.将库 Unity.AspNet.WebAp 添加到您的应用程序。 2.UnityConfig.cs文件将添加到您的APP_START文件夹中。

然后按照我在示例应用程序中完成的代码进行操作。