C# 如何在asp.net web api项目而不是.net core上使用DI

C# 如何在asp.net web api项目而不是.net core上使用DI,c#,asp.net-web-api,webapi2,C#,Asp.net Web Api,Webapi2,以下文档显示了如何为.net核心项目配置cosmonaut 在ServiceCollection中注册CosmosStores以获得DI支持 var cosmosSettings=新的CosmosStoreSettings(“,”,“); serviceCollection.AddCosmosStore(cosmosSettings); //或者仅仅通过使用操作扩展 serviceCollection.AddCosmosStore(“,”,“,”,设置=> { settings.Connect

以下文档显示了如何为.net核心项目配置cosmonaut

在ServiceCollection中注册CosmosStores以获得DI支持
var cosmosSettings=新的CosmosStoreSettings(“,”,“);
serviceCollection.AddCosmosStore(cosmosSettings);
//或者仅仅通过使用操作扩展
serviceCollection.AddCosmosStore(“,”,“,”,设置=>
{
settings.ConnectionPolicy=ConnectionPolicy;
settings.DefaultCollectionThroughput=5000;
settings.IndexingPolicy=新的IndexingPolicy(新的范围索引(DataType.Number,-1),
新的RangeIndex(DataType.String,-1));
});

如何处理旧的webpi项目?

WebAPI 2没有现成的依赖注入,您可以使用第三方依赖注入包,如Autofac和Ninject等,或者如果您根本不想使用依赖注入,也可以创建Cosmonaut的singleton类

注:按照他们的标准,Cosmonaut实例应作为每个实体的单例实例使用

更新

通用单例类的实现,其中T是您请求实例的实体类型

public sealed class CosmosStoreSingleton<T>
{
    private static ICosmosStore<T> instance = null;

    public static ICosmosStore<T> Instance
    {
        get
        {
            if (instance==null)
            {
                var cosmosSettings = new CosmosStoreSettings("<<databaseName>>", "<<cosmosUri>>", "<<authkey>>");
                instance = new CosmosStore<T>(cosmosSettings);
            }

            return instance;
        }
    }
}
公共密封类宇宙存储单体
{
私有静态ICOSMStore实例=null;
公共静态ICOSMStore实例
{
得到
{
if(实例==null)
{
var cosmosSettings=新的CosmosStoreSettings(“,”,“);
实例=新的CosmosStore(cosmosSettings);
}
返回实例;
}
}
}

Web Api 2没有现成的依赖项注入,您可以使用第三方依赖项注入包,如Autofac和Ninject等,或者如果您根本不想使用依赖项注入,也可以创建Cosmonaut的singleton类

注:按照他们的标准,Cosmonaut实例应作为每个实体的单例实例使用

更新

通用单例类的实现,其中T是您请求实例的实体类型

public sealed class CosmosStoreSingleton<T>
{
    private static ICosmosStore<T> instance = null;

    public static ICosmosStore<T> Instance
    {
        get
        {
            if (instance==null)
            {
                var cosmosSettings = new CosmosStoreSettings("<<databaseName>>", "<<cosmosUri>>", "<<authkey>>");
                instance = new CosmosStore<T>(cosmosSettings);
            }

            return instance;
        }
    }
}
公共密封类宇宙存储单体
{
私有静态ICOSMStore实例=null;
公共静态ICOSMStore实例
{
得到
{
if(实例==null)
{
var cosmosSettings=新的CosmosStoreSettings(“,”,“);
实例=新的CosmosStore(cosmosSettings);
}
返回实例;
}
}
}

来自文档:来自文档:如果您想通过Autofac或自定义Singleton类解析它,我很乐意为您提供示例代码。您应该在创建Singleton实例时使用锁定。是的,当实例不是线程安全时,应该使用锁定,但是根据他们的文档,这个cosmos store实例似乎是线程安全的。如果您想通过Autofac或自定义Singleton类解析它,我很乐意为您提供示例代码。您应该在创建Singleton实例时使用锁定。是的,当实例不是线程安全的时候,应该使用锁定,但根据他们的文档,这个cosmos商店实例似乎是线程安全的。