.net core 依赖项未直接注入.NET Core中的私有字段
在我的.net core 依赖项未直接注入.NET Core中的私有字段,.net-core,dependency-injection,.net Core,Dependency Injection,在我的appsettings.json文件中,我有一个如下部分: "MongoDbSettings": { "ConnectionString": "mongodb://localhost:127.0.0.1", "DatabaseName": "ComparisonDb" } 而且,我有一个自定义类,它可以处理以上两个子部分 public interface IMongoDbSet
appsettings.json
文件中,我有一个如下部分:
"MongoDbSettings": {
"ConnectionString": "mongodb://localhost:127.0.0.1",
"DatabaseName": "ComparisonDb"
}
而且,我有一个自定义类,它可以处理以上两个子部分
public interface IMongoDbSetting
{
string DatabaseName { get; set; }
string ConnectionString { get; set; }
}
public class MongoDbSetting : IMongoDbSetting
{
public string DatabaseName { get; set; }
public string ConnectionString { get; set; }
}
我对我的Startup.cs
文件做了以下定义:
services.Configure<MongoDbSetting>(Configuration.GetSection("MongoDbSettings"));
//...
services.AddSingleton<IMongoDbSetting>(serviceProvider => serviceProvider.GetRequiredService<IOptions<MongoDbSetting>>().Value);
services.AddControllers();
MongodBrespositoryBase:
public class MongoDbRepositoryBase<T> : IOperation<T> where T : class
{
private readonly IMongoCollection<T> _collection;
public MongoDbRepositoryBase(IMongoDbSetting settings)
{
IMongoDatabase database = new MongoClient(settings.ConnectionString).GetDatabase(settings.DatabaseName);
_collection = database.GetCollection<T>(GetCollectionName(typeof(T)));
}
//CRUD methods
}
public类MongoDbRepositoryBase:IOOperation其中T:class
{
私人只读IMongoCollection\u collection;
公共MongoDbRepositoryBase(IMongoDbSetting设置)
{
IMongoDatabase database=new MongoClient(settings.ConnectionString).GetDatabase(settings.DatabaseName);
_collection=database.GetCollection(GetCollectionName(typeof(T));
}
//积垢法
}
据我所知,ASP.NET核心的DI只支持构造函数注入。所以你需要类似于
public UserRepository(IMongoDbSetting mongoDbSetting, ...) {
_mongoDbSetting = mongoDbSetting;
// and so on
}
让DI注入你想要的东西
或者(我个人不会采用这种方式,但这是一种选择),您可以让您的代码直接要求服务提供商提供一个实例,这里有一个示例
作为旁注,您的\u mongoDbSettings
字段也是私有的
。我相信可以进行现场注入的DI框架至少需要得到保护。可能是错误的,但这是未来需要记住的。据我所知,ASP.NET Core的DI只支持构造函数注入。所以你需要类似于
public UserRepository(IMongoDbSetting mongoDbSetting, ...) {
_mongoDbSetting = mongoDbSetting;
// and so on
}
让DI注入你想要的东西
或者(我个人不会采用这种方式,但这是一种选择),您可以让您的代码直接要求服务提供商提供一个实例,这里有一个示例
作为旁注,您的\u mongoDbSettings
字段也是私有的
。我相信可以进行现场注入的DI框架至少需要得到保护。可能是错误的,但这是未来需要记住的。用户存储库是否有我缺少的构造函数?@Josephrot不,它没有你应该检查的构造函数,UserRepository
是否有我缺少的构造函数?@Josephrot不,它没有你应该检查和
public UserRepository(IMongoDbSetting mongoDbSetting, ...) {
_mongoDbSetting = mongoDbSetting;
// and so on
}