有没有办法使用 DI 模式集中访问 C# 中的 DataContext?

问题描述

这是我到目前为止所得到的,但必须不断传递 DataClassesDataContext。我想知道是否有更好更集中的方式来使用 DataClassesDataContext 并在每次使用数据上下文时填充连接字符串...提前感谢所有帮助

public interface ICustomerDataAccess
{
    string GetCustomerName(int customerId);
}

public class CustomerDataAccess : ICustomerDataAccess
{
    private readonly DataClassesDataContext _context;
    public CustomerDataAccess(DataClassesDataContext ctx)
    {
        _context = ctx;
    }

    public string GetCustomerName(int id)
    {
        return _context.Customers.Where(i => i.id == id).FirstOrDefault().name;
    }
}
public class DataAccessFactory
{
    public static ICustomerDataAccess GetCustomerDataAccessObj(DataClassesDataContext ctx)
    {
        return new CustomerDataAccess(ctx);
    }
}
public class CustomerService
{
    CustomerBusinessLogic _customerBL;

    public CustomerService(DataClassesDataContext ctx)
    {
        _customerBL = new CustomerBusinessLogic(new CustomerDataAccess(ctx));
    }

    public string GetCustomerName(int id,DataClasses1DataContext ctx)
    {
        return _customerBL.GetCustomerName(id,ctx);
    }
}
public class CustomerBusinessLogic
{
    ICustomerDataAccess _custDataAccess;
    public CustomerBusinessLogic(ICustomerDataAccess custDataAccess)
    {
        _custDataAccess = custDataAccess;
    }

    public CustomerBusinessLogic(DataClassesDataContext ctx)
    {
        _custDataAccess = new CustomerDataAccess(ctx);
    }
    public string GetCustomerName(int id,DataClassesDataContext ctx)
    {
        _custDataAccess = DataAccessFactory.GetCustomerDataAccessObj(ctx);
        return _custDataAccess.GetCustomerName(id);
    }
}

// 并在界面上使用这样的代码

private void button5_Click(object sender,EventArgs e)
    {
        
        using (var ctx = new DataClassesDataContext)
        {
            CustomerService customerSrv = new CustomerService(ctx);
            textBox1.Text = customerSrv.GetCustomerName(1,ctx);
        }       
    }

解决方法

您可以将通用存储库与依赖注入一起使用。这是第一次有点复杂的结构,但这可以解决您的问题。

我还与您分享了一个很好且详细的示例。这是我创造的

https://github.com/EyupCanARSLAN/N-Tier-Architecture-with-Generic-Repository--Dependency-Injection-And-Ninject/security/dependabot

还有一篇关于这个话题的文章

https://dotnettutorials.net/lesson/generic-repository-pattern-csharp-mvc/

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...