Как сделать общую строку подключения для всех DAL (Data Access Layer) - PullRequest
1 голос
/ 28 марта 2019

Я должен использовать «IConfiguration» для ConnectionString во всем моем контроллере.И я также должен отправить его в моем DAL.

Я хочу сделать общий DAL (слой доступа к данным) и наследовать его в другом DAL.

На самом деле я не хочу использовать EF (Entity Framework)

 public class UserController : Controller
    {
        public string ConnectionString { get; set; }

        private readonly IConfiguration configuration;

        public UserController(IConfiguration config)
        {
            this.configuration = config;
            ConnectionString = configuration.GetConnectionString("DefaultConnection");
        }

        public IActionResult ViewProfile()
        {
            UserControllerGateway userControllerGateway = new UserControllerGateway();

            UserProfileModel userProfile = new UserProfileModel();
            userProfile = userControllerGateway.ViewProfile(ConnectionString);//I have to send connectionString to my DAL

            return View(userProfile);
        }
///DAL
public class CommonGateway
    {
        public string ConnectionString { get; set; }
        public SqlConnection Connection { get; set; }
        public SqlCommand Command { get; set; }
        public string Query { get; set; }
        public SqlDataReader Reader { get; set; }

        public CommonGateway()
        {
            ConnectionString = " "; //What can I do here
        }                 
    }

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Вы в основном спрашиваете, как использовать внешнюю конфигурацию без фактической внешней. Если логика (или ее отсутствие) этого утверждения не очевидна, то, что вы хотите, не возможно.

Способ обмена чем-либо между различными классами и / или проектами - это класс, скорее всего, в библиотеке классов. Если вам нравится, вы можете создать статический класс «констант» для хранения строки подключения:

public static class Constants
{
    public const string ConnectionString = "foo";
}

Однако это то, что называется «анти-паттерном». Другими словами, это то, что вы не должны делать. В частности, с чем-то вроде строки подключения, которая, как правило, должна варьироваться в зависимости от среды, чего трудно достичь с помощью такого статического класса. У вас также есть проблема защиты этой строки, поскольку ваше приложение может быть легко декомпилировано для его обнаружения, а также имени пользователя и пароля для доступа к вашей базе данных. Если вы думаете SecureString, это не сработает. Исходный строковый литерал все еще уязвим, даже если вы пытаетесь создать из него SecureString.

Короче говоря, внешняя конфигурация является внешней по причине. Это позволяет вашему приложению получать необходимую информацию, не связывая эту информацию с вашим приложением. Вы можете отключить его по своему усмотрению и, что важно, использовать механизмы безопасного хранения для защиты информации в состоянии покоя.

Более того, что-то вроде DAL предполагается абстрактным. Даже если вы обычно создаете его для конкретного приложения, оно должно иметь степень повторного использования. Если вы привяжете к нему строку подключения, то она будет тесно связана с этим конкретным доменом, что обычно является плохим дизайном.

Короче говоря, сохраняйте конфигурацию там, где она есть: на уровне приложения и вне ее.

0 голосов
/ 28 марта 2019

Вы можете просто создать статический класс и использовать его для легкого доступа к вашей реализации DAL там, где вам это нужно.

...