Доступ к занятиям - PullRequest
       11

Доступ к занятиям

2 голосов
/ 03 сентября 2011

Я не уверен, где / как искать этот вопрос, поэтому я подумал, что лучше всего задать вопрос о комманде stackoverflow.

По сути, я разрабатываю проект, который просто предоставит логическому проекту доступ кМодель LINQ to SQL для выполнения CRUD для базы данных.Итак, в рамках проекта Data у меня есть класс модели LINQ to SQL и класс C # для обеспечения доступа к модели, как показано ниже

public class Connection : IDisposable
{
    private DataModelDataContext _model;
    public DataModelDataContext model
    {
        get { return _model; }
        set { throw new Exception("Object \"model\" is not allowed to be created outside of its container class", new NotSupportedException()); }
    }

    public Connection(string username, string password)
    {
        User u = _model.Users.Where(u => u.Username == username && u.password == u.Password);

        if (u == null)
            throw new ApplicationException("User credentials are invalid", new AuthenticationException());
        _model = new DataModelDataContext();
    }

    public void refreshAndKeepChanges(object entity)
    {
        _model.Refresh(RefreshMode.OverwriteCurrentValues, entity);
    }

    public int getChangesCount()
    {
        return _model.GetChangeSet().Deletes.Count() + _model.GetChangeSet().Inserts.Count() + _model.GetChangeSet().Updates.Count();
    }

    public void Dispose()
    {
        _model.SubmitChanges();
        _model.Dispose();
    }
}

Что я хочу, когда я компилирую DLL для проекта логикииметь доступ к классу Connection (см. выше), но не к DataModelDataContext (так как это повредит объекту передачи учетных данных пользователя).

Мой вопрос заключается в том, как предоставить класс Connection (как общедоступный, что я уже сделал) но скрыть модель данных LINQ to SQL из библиотеки DLL, но разрешить доступ к ней класса подключения ???

использование дополнительного пространства имен для модели LINQ to SQL не работает, я обнаружил, что добавление библиотеки DLL позволяет получить доступдля всех пространств имен в проекте.

Ответы [ 2 ]

1 голос
/ 03 сентября 2011

Вы меняете public DataModelDataContext model на

internal DataModelDataContext model

если вы хотите, чтобы он был "общедоступным в этой сборке, но закрытым для всех других сборок"

protected DataModelDataContext model

или

private DataModelDataContext model

, если вы не хотите предоставлять DataModelDataContext другим классам в этой сборке.

Скорее всего, вы хотите это как internal.

Термин, который вы можете искать (или читать непосредственно в MSDN): Модификаторы доступа .

1 голос
/ 03 сентября 2011

Просто измените свойство model на внутреннее вместе с классом DataModelDataContext (что, вероятно, выполняется путем редактирования DBML, либо в конструкторе, либо вручную).Класс Connection может знать о внутренних классах - он просто не может их публично показывать.

В качестве пары сторон:

  • Если установщик modelникогда не будет функциональным, зачем вообще его иметь?Просто избавьтесь от этого.
  • Вы должны начать следовать .NET соглашениям об именах
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...