如何在ASP.NET CORE中删除多层的循环依赖

时间:2019-12-20 08:09:46

标签: c# asp.net-core dependency-injection configuration

我在 ASP.NET CORE 上的一个应用程序中遇到了一些体系结构问题。我在“应用程序”文件夹中有Web应用程序,在Business中有业务层,在Data中有上下文相关的内容。最后,在Model中,我有了模型。

enter image description here

现在问题是I use Data and Model in Business layer and then I use the Business in Application controllers。但是在某些情况下,我需要使用Data in Application to。这会导致不需要的依赖项体系结构。

所以我想要的是在这里使用库的最佳方法。

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });
    services.AddDbContextPool<ApplicationDBContext>(options =>options.UseLazyLoadingProxies().UseSqlServer(Configuration.GetConnectionString("amcConn")));
    services.AddIdentity<ApplicationUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDBContext>()
    .AddDefaultTokenProviders();

    services.AddSession();
    services.AddSingleton<IConfiguration>(Configuration);
    services.AddMvc(options=> {
        var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
        options.Filters.Add(new AuthorizeFilter(policy));
    }).AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver()).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

}

有人可以建议我如何管理吗?

1 个答案:

答案 0 :(得分:0)

您描述的是间接(传递)依赖性,而不是循环依赖性。对于多层而言,取决于核心(模型)层是很常见的。

让业务依赖数据并不是那么干净,但也不是真正的问题或周期。如果要更好地解决该问题,请创建一个IStorage接口,该接口由业务和应用程序使用,由数据实现。 IStorage self则属于ring1或ring2层。

当您以洋葱架构的方式描绘这些图层时,这更有意义。外 环取决于内环。