我现在在我的注册服务部分中使用它。这里的问题是我的服务具有自己的依赖关系,也许那些服务将具有依赖关系。我看不到如何解决这个问题。例如,我的位置服务需要http客户端,记录器和两个不同的存储库。我期望已经将这4个依赖项注册为服务,这会自行解决。任何建议将不胜感激。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
// db related
var connectionString = Configuration.GetConnectionString("VoloDataBaseConnectionString");
var dbContext = new DbContext(connectionString);
services.AddSingleton<IDbContext>(dbContext);
services.AddScoped(typeof(Repository<>), typeof(Repository<>));
// utilities
services.AddSingleton(new HttpClient());
services.AddSingleton(new Logger(dbContext));
// bll services
services.AddSingleton(
new LocationService(
new HttpClient(),
new Logger(dbContext),
new Repository<Country>(dbContext),
new Repository<Location>(dbContext)
)
);
}
答案 0 :(得分:1)
我希望已经将这4个依赖项注册为服务,这会自行解决。
它将自理。您只需要利用容器的自动装配功能即可:
services.AddScoped<LocationService>();
请注意,为了防止Captive Dependencies,您应确保组件不依赖其他生活方式较短的组件。例如,不要让Singleton
组件依赖于Scoped
组件。因此,LocationService
不应 注册为Singleton
,而应注册为Scoped
或Transient
。