在asp.net核心中使用Depedency Injection的UnitOfWork模式

时间:2018-03-21 14:28:40

标签: c# asp.net-core entity-framework-core

我想将项目移动到ASP.NET Core框架。我是asp.net核心的新手,所以不知道如何在那里使用UnitOfWork模式。当我使用asp.net mvc时,我将解决方案划分为3层架构(DAl,BLL,WEB层)。在BLL层,我使用了Ninject注入,所以我不需要从我的WEB层添加对DLL的引用。

public class ServiceModule : NinjectModule
{
    private string connectionString;
    public StandardKernel _kernel;
    IUnitOfWork uow;
    public ServiceModule(string connection)
    {
        connectionString = connection;
        uow = new EFUnitOfWork(connectionString);
    }
    public override void Load()
    {
        Bind<IUnitOfWork>().To<EFUnitOfWork>().WithConstructorArgument(connectionString);
    }
}

但是所有教程都说在ASP.NET核心应用程序中应该在ConfigureServices(WEB层)方法中使用核心注入:

services.AddTransient<IUnitOfWork, EFUnitOfWork>();

但是,添加引用以从WEB添加对DAL层的引用是个坏主意。

那么,我该怎么办?添加引用(不要这么认为)或编辑我的结构?或者其他什么?

1 个答案:

答案 0 :(得分:1)

您可以使用扩展方法并将其放入BLL库中:

namespace Microsoft.Extensions.DependencyInjection
{
    public static class BllServiceCollectionExtensions
    {
        public static IServiceCollection AddBll(this IServiceCollection services)
        { 

            services.AddTransient<IUserService, UserService>();
            services.AddTransient<ITransactionService, TransactionService>();
        }
    }
}

在您的Web项目中,您可以将其添加到您的Startup.cs中,如此

public void ConfigureServices(IServiceCollection services)
{
    ...
    serivices.AddBll();
    ...
}