Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Где почитать о Ninject?

Пытаюсь разобраться с инверсией управления - на этом, вроде бы, построен весь механизм тестирования в MVC. C идеологией более-менее понятно, но с реализацией - возникает масса вопросов. В частности, где можно достаточно регулярно ознакомиться с Ninject (см. рисунок), но этой книги нет в продаже в books.ru Может где она лежит в свободном доступе? В Интернете , да и у Сандерсона всё как-то обрывочно и, соответственно, не очень понятно.
С уважением ...
Ответ: А что рам про него читать - на сайте есть пример и понеслась. Там же все примитвно. Как и должно быть.
Вопрос: Суть Ninject

Всем привет! Можно ли рассказать мне про внутренности Ninject, так сказать behind the scenes. Как все под капотом работает, а то примеры кода понимаю легко, вроде все ясно, НО не чую никакого сакрального смысла зачем же его используют на проектах? И почему обязанность по созданию объектов мы возлагаем именно на него? Такое чувство, что все выражаются абстракциями а по толку сказать ничего не могут.
Ответ: Спасибо, стало понятнее но есть вопросы для прояснения (для лучшего понимания):
1.
Сообщение от LeniumSoft
Тебе походу нужно про это читать.
Как раз мне был именно не до конца понятен Ninject, а DI мне понятен.
2. Для ясности,
Сообщение от LeniumSoft
Задача контейнера зависимостей(Ninject) загрузить все зависимости из такой сборки в наше приложение.
Как именно происходит загрузка данных зависимостей?
3.
Сообщение от LeniumSoft
Приложение будет знать только интерфейсы сервисов,
Т.е. те интерфейсы, тот, можно сказать, протокол общения который определен заранее на основе тех же самых интерфейсов в проекте до добавления какой либо другой dll.
4.
Сообщение от LeniumSoft
а ninject будет создавать сами сервисы для этих интерфейсов.
т.е. нам будет достаточно знать dll и интерфейс а обязанность ninject предоставить экземпляр класса который реализует интерфейс.
И еще слышал фразу, что "при необходимости что-либо изменить, нам придется изменить это в одном месте" я вроде понимаю что без ninject мы бы создавали по всему проекту экземпляры классов вручную и пришлось бы менять их везде там, где мы их и создаем. Но с ninject это говорится про то место где фигурируют методы расширения Bind() и To() ?
когда ninject понимает что надо создать и предоставить объект пользователю?
Вопрос: ninject

Привет, имею готовый код но не знаю, как применить Ninject
Буду очень благодарен за помощь :sample 

Код

class CheckAccess:ICheck
    {
        public string Ping(string url)
        {
#pragma warning disable
            HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(url);
            httpReq.AllowAutoRedirect = false;
            HttpWebResponse httpRes = (HttpWebResponse)httpReq.GetResponse();
            if (httpRes.StatusCode == HttpStatusCode.NotFound)
            {
                return "Not";
            }
            else
            {
                return "Ok";
            }
            httpRes.Close();
#pragma warning restore
        }
    }


Код

interface ICheck
    {
        string Ping(string url);
    }


Код

 class FileOutput:IData
    {
        public void WriteData(string data)
        {
            string curFile = @"c:\temp\test.txt";
            Console.WriteLine(File.Exists(curFile) ? "File exists." : "File does not exist.");
            Console.ReadKey();
        }

        internal void WriteData()
        {
            throw new NotImplementedException();
        }
    }

Код

interface IData
    {
        void WriteData(string data);
    }[IMG]http://[/IMG]

Код

class Factory
    {
        public IData Show(ConsoleKey key)
        {
            switch (key)
            {
                case ConsoleKey.D1:
                    return new ConsoleOutput();
                case ConsoleKey.D2:
                    return new FileOutput();
                case ConsoleKey.D3:
                    return new MixedOutput();
                default:
                    return new ConsoleOutput();
            }
        }
    }

Код

class ConsoleOutput:IData
    {
        public void WriteData(string data)
        {
            Console.WriteLine(data);
            Console.ReadLine();
        }
    }

Код

 class MixedOutput:IData
    {
        private readonly ConsoleOutput _consoleOutput = new ConsoleOutput();
        private readonly FileOutput _fileOutput = new FileOutput();

        public void WriteData(string data)
        {
            _consoleOutput.WriteData(data);
            _fileOutput.WriteData(data);
        }
    }

Код

class MyNinject:NinjectModule
    {
        public override void Load()
        {
            this.Bind<ICheck>().To<CheckAccess>();
        }
  
    }


Код

 class Program
    {
        private static readonly CheckAccess chk = new CheckAccess();

        public static IKernel AppKernel;

        static void Main(string[] args)
        {
            AppKernel=new StandardKernel(new MyNinject());
            var myvar = AppKernel.Get<FileOutput>();
            myvar.WriteData();
            var factory = new Factory();
            var result = chk.Ping("http://www.dou.ua");

            // If 1 - write to console
            // If 2 - write to file
            // If 3 - both
            // If Esc - exit
            while (true)
            {
                var key = Console.ReadKey();
                if (ConsoleKey.Escape == key.Key)
                {
                    return;
                }
                var outputer = factory.Show(key.Key);
                outputer.WriteData(result);
            }
        }
    }
}


Может я не верно написал в классе MyNinject?
Ответ:
Привет, имею готовый код но не знаю, как применить Ninject
Буду очень благодарен за помощь :sample 

Код

class CheckAccess:ICheck
    {
        public string Ping(string url)
        {
#pragma warning disable
            HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(url);
            httpReq.AllowAutoRedirect = false;
            HttpWebResponse httpRes = (HttpWebResponse)httpReq.GetResponse();
            if (httpRes.StatusCode == HttpStatusCode.NotFound)
            {
                return "Not";
            }
            else
            {
                return "Ok";
            }
            httpRes.Close();
#pragma warning restore
        }
    }


Код

interface ICheck
    {
        string Ping(string url);
    }


Код

 class FileOutput:IData
    {
        public void WriteData(string data)
        {
            string curFile = @"c:\temp\test.txt";
            Console.WriteLine(File.Exists(curFile) ? "File exists." : "File does not exist.");
            Console.ReadKey();
        }

        internal void WriteData()
        {
            throw new NotImplementedException();
        }
    }

Код

interface IData
    {
        void WriteData(string data);
    }[IMG]http://[/IMG]

Код

class Factory
    {
        public IData Show(ConsoleKey key)
        {
            switch (key)
            {
                case ConsoleKey.D1:
                    return new ConsoleOutput();
                case ConsoleKey.D2:
                    return new FileOutput();
                case ConsoleKey.D3:
                    return new MixedOutput();
                default:
                    return new ConsoleOutput();
            }
        }
    }

Код

class ConsoleOutput:IData
    {
        public void WriteData(string data)
        {
            Console.WriteLine(data);
            Console.ReadLine();
        }
    }

Код

 class MixedOutput:IData
    {
        private readonly ConsoleOutput _consoleOutput = new ConsoleOutput();
        private readonly FileOutput _fileOutput = new FileOutput();

        public void WriteData(string data)
        {
            _consoleOutput.WriteData(data);
            _fileOutput.WriteData(data);
        }
    }

Код

class MyNinject:NinjectModule
    {
        public override void Load()
        {
            this.Bind<ICheck>().To<CheckAccess>();
        }
  
    }


Код

 class Program
    {
        private static readonly CheckAccess chk = new CheckAccess();

        public static IKernel AppKernel;

        static void Main(string[] args)
        {
            AppKernel=new StandardKernel(new MyNinject());
            var myvar = AppKernel.Get<FileOutput>();
            myvar.WriteData();
            var factory = new Factory();
            var result = chk.Ping("http://www.dou.ua");

            // If 1 - write to console
            // If 2 - write to file
            // If 3 - both
            // If Esc - exit
            while (true)
            {
                var key = Console.ReadKey();
                if (ConsoleKey.Escape == key.Key)
                {
                    return;
                }
                var outputer = factory.Show(key.Key);
                outputer.WriteData(result);
            }
        }
    }
}


Может я не верно написал в классе MyNinject?
Вопрос: Внедрение зависимостей в .NET Ninject

Здравствуйте я читал литературу по "Внедрение зависимостей в .NET" мне нужно получше разобраться с этим материалом в часности как вывести данные из связанных таблиц пользуясь этой технологией , так как в большинстве авторы пишут на примере с одной таблицей , буду благодарен если Вы подскажите нужную литературу или советом. Спасибо. ASP.NET MVC Ninject
Ответ: В книге Адама Фримена "ASP.NET MVC 5 c примерами на C# для профессионалов", 5-е издание (М.: ИД "Вильямс", 2016) описано применение Ninject на конкретном примере.
Вопрос: Ninject не сопоставляет второй интерфейс в конструкторе

Использую внедрение зависимостей,в контроллере когда в конструктор передавал один интрефейс,bind'ы срабытывали,когда добавил второй интерфейс в конструктор,ninject не находит сопоставления со вторым параметром,может у кого нибудь возникала такая проблема

когда было так все работало..
C#
1
2
3
4
5
6
7
private IOrderService _orderService;
        
        public OrderController(IOrderService orderService)
        {
            _orderService = orderService;
          
        }

но когда сделал так:

C#
1
2
3
4
5
6
7
private IOrderService _orderService;
        private ICartService _cartService;
        public OrderController(IOrderService orderService,ICartService cartService)
        {
            _orderService = orderService;
            _cartService = cartService;
        }
перестали сопоставляться интерфейсы с конкретными репозиториями


вот здесь проходят сопоставления :
C#
1
2
3
4
5
6
7
8
  private void AddBindings()
        {
            kernel.Bind<ICartService>().To<CartService>();
            kernel.Bind<ICommentService>().To<CommentService>();
            kernel.Bind<IProductService>().To<ProductService>();
            kernel.Bind<IOrderService>().To<OrderService>();
 
        }
Ответ: Покажите реализации OrderService и CardService, интересуют их конструкторы. Да и текст ошибки был бы не лишним.
Вопрос: Изменение параметров Bind работающего Windows сервиса с помощью Ninject

Приложение написано с использованием Ninject
Регистрируется как Windows сервис
В процессе активации через ядро (Kernel) загружаются модули (NinjectModule) с многочисленными привязками (Bind)
Для некоторых привязок указываются параметры (WithConstructorArgument)
По умолчанию, при старте параметры считываются из конфигурационного файла, и сервис стартует как WCF
Нужно дать возможность, вызывая специальный метод сервиса переопределять некоторые параметры привязок. Ну, например, это параметры соединения с SQL-сервером, логин или что-то еще. Т.е., не перезапускать сервис заново, а именно переопределить параметры уже работающего экземпляра
Я понимаю, что как-то надо найти через Kernel работающий инстанс сервиса, его модули и сделать, например
var kernel = new StandardKernel();
var module = (DataAccessModule)kernel.Get(typeof(DataAccessModule));

module.Rebind<IRepository>().To<SqlRepository>().WithConstructorArgument("connectionString", "Data Source=...");

но что-то ничего не получается... сервис как работал с параметрами, загруженными при старте, так и работает
как сделать правильно?
Ответ: ЕвгенийВ,

как найти сервис?
Вопрос: Где подробно почитать про MVC?

Доброго времени суток!!! Подскажите пожалуйста где можно подробно почитать про MVC?


Заранее большое спасибо!!!
Ответ:
Цитата Сообщение от Inkvizzz Посмотреть сообщение
Доброго времени суток!!! Подскажите пожалуйста где можно подробно почитать про MVC?
MVC это не что-то конкретное, это схема проектирования. И каждый человек воплощает ее по своему, придерживаясь каких то общих правил. Не получится просто так прочитать и сразу понять что такое MVC. Прочитайте несколько статей (их полно в гуле по запросу "php mvc"), попробуйте что-нибудь свое...
Вопрос: что можно почитать о таком скрипте?

нужно составить такой скрипт в php....есть база в mysql. она выведена для простой наглядности...подскажите что можно почитать по такому скрипту
Ответ: Ну и формируйте таблицу автоматически из результата запроса к БД.
Почитать
  • Учебники по php;
  • Справку по mysqli;
  • Вывод в документ Excel, если он требуется.
Вопрос: Ошибка 'MvcApplication" does not implement inherited abstract member 'Ninject'

Всем привет, нужна хелпа знающих людей
Я пытаюсь освоить ASP.NET по урокам хабра, встал на первом же уроке)

В файле Global.asax.cs не удается заставить работать строку
Код C#
1
 public class MvcApplication : NinjectHttpApplication
Пишет ошибку 'MvcApplication" does not implement inherited abstract member 'Ninject...'
Вот весь код:
Код 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using Ninject.Web.Common;
using Ninject.Web.Mvc;
 
namespace MvcApplication1
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit [url]http://go.microsoft.com/?LinkId=9394801[/url]
    public class MvcApplication : NinjectHttpApplication
    {
            private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
            protected void Application_Start()
            {
                logger.Info("Application Start");
 
                AreaRegistration.RegisterAllAreas();
 
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
            }
    }
}
Подскажите что не так делаю, плз)
Ответ: quizzer, ладно, спасибо, хорошо что только начал, лучше начну 5 изучать)
Вопрос: ninject resolve объектов

Помогите разобраться новичку,
многие примеры которые я нашел в сети используют метод: IKernel.Get<ISomeObject>();
Такое использование похоже на паттерн ServiceLocator. Это так?
Как делается разрешение объектов в реальных приложениях? Используется injection в конструктор?
Ответ: Пожалуйста )
Всегда считал, что лучше читать для начала книгу, а уже потом множество статей.