powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# доступ к классу через публичный interface
5 сообщений из 5, страница 1 из 1
c# доступ к классу через публичный interface
    #39512024
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Помогите пожалуйста разобраться в вопросе. Имеется сборка в ней имеется класс Core с классом доступа internal и наследующий два интерфейса. Интерфейс ICoreOther предназначен для использование другими сборками, в частности Others.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
namespace NoNane.Core
{
    internal class Core : ICore, ICoreOther
    {
	private bool _access;
	public void Run(bool access)
        {
           _access = access;
        }
        public bool GetAccess()
        {
           return _access;
        }
    }
    internal interface ICore
    { 
        string Run();
    }
    public interface ICoreOther
    { 
        bool GetAccess();
    }
	
    internal class CoreConfiguration
    {
        protected CoreConfiguration()
	{
            Bind<ICore, ICoreOther>().To<Core>().InSingletonScope();
	}
    }	
}

namespace Others
{
    public class Test
    {
	    public Test()
        {
            var d = // вызываю метод GetAccess() класса Core через ICoreOther. Использую INinjectModule
        }
    }
}



В итоге в сборке Others, я не может достучаться до класса Core через ICoreOther. Я понимаю что дело в классе доступа. Если к примеру я поменяю класс доступа на public class Core, то все заработает. Но мне нужно сделать так чтобы доступен был только через интерфейс ICoreOther, а класс Core и интерфейс ICore был защищен.
Как реализовать такую структуру доступа?
...
Рейтинг: 0 / 0
c# доступ к классу через публичный interface
    #39512053
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoНо мне нужно сделать так чтобы доступенЛибо доступен (хоть через интерфейс, хоть как, уж определись), либо недоступен.
Если нужно, чтобы другая сборка не могла инстанцировать класс - сделай конструктор internal.
...
Рейтинг: 0 / 0
c# доступ к классу через публичный interface
    #39512061
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Разобрался! Пример приведенный выше правильный и схема рабочая. Я просто сам запарился, сборку other переименовал, а путь c новым название dll забыл изменить.

Вопрос решен.
...
Рейтинг: 0 / 0
c# доступ к классу через публичный interface
    #39512076
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechto,

Начнем с того, что приведенная реализация класса Core не скомпилируется - она не соответствует объявленным интерфейсам. Далее, не приведены детали реализации инжекта класса, и и его получения.
После некоторой подрихтовки (для примера на скорую руку здесь используется сервис-локатор, но это только для примера) всё вполне работает:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
namespace NoNane.Core
{
  internal class Core : ICore, ICoreOther
  {
    private bool _access;
    public void Run(bool access)
    {
      _access = access;
    }
    public bool GetAccess()
    {
      return _access;
    }
  }

  internal interface ICore
  {
    void Run(bool access);
  }

  public interface ICoreOther
  {
    bool GetAccess();
  }

  internal class CoreConfiguration : NinjectModule
  {
    public override void Load()
    {
      Bind<ICore, ICoreOther>().To<Core>().InSingletonScope();
    }
  }

  public static class Resolver
  {
    static readonly IKernel _kernel = new StandardKernel(new CoreConfiguration());
    public static T Get<T>()
    {
      return _kernel.Get<T>();
    }
  }
}

namespace test
{
  class Program
  {
    static void Main()
    {
      var coreOther = NoNane.Core.Resolver.Get<NoNane.Core.ICoreOther>();
      Console.WriteLine(coreOther.GetAccess());
      Console.WriteLine("done");
      Console.ReadKey(true);
    }
  }
}


(разумеется, NoNane.Core и test находятся в разных сборках).
...
Рейтинг: 0 / 0
c# доступ к классу через публичный interface
    #39512110
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны,

У меня было для наглядности. С вашими дополнениями стало ещё лучше.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# доступ к классу через публичный interface
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]