Как использовать контейнер Dryioc из основного приложения в библиотеке классов

dryioc

538 просмотра

1 ответ

Я новичок в дрииоке, так что извините за невежество :)

Я хотел бы понять, каков будет правильный подход для следующего,

Создание консольного приложения, которое создает экземпляр контейнера dryioc. Зарегистрируйте регистратор в контейнере (как синглтон). Затем создайте экземпляр класса из библиотеки классов (отдельный проект), который будет использоваться в приложении консоли, и сможете ссылаться на контейнер (основное приложение) из библиотеки классов, чтобы получить экземпляр регистратора. Таким образом, библиотека классов будет использовать любой регистратор, зарегистрированный в консольном приложении.

Я предпочел бы не передавать контейнер как часть конструкторов в библиотеке классов.

Спасибо за любую помощь.

Автор: Del Источник Размещён: 08.11.2019 11:01

Ответы (1)


2 плюса

Решение

Что-то вроде этого. Вероятно, верно для любого другого контейнера (или даже без контейнера):

namespace Core
{
    public interface ILogger 
    {
        void Log(string message);
    }
}

namespace Lib
{
    using Core;

    public class Foo
    {
        readonly ILogger _logger;
        public Foo(ILogger logger) 
        {
             _logger = logger;
        }

        public void DoSomething()
        {
             _logger.Log("About to do something ...");
        }
    }
}

namespace ConsoleApp
{   
    using System;

    using Core;
    using Lib;

    using DryIoc;

    public class ConsoleLogger : ILogger 
    {
        public void Log(string message)
        {
            Console.WriteLine(message);
        }
    }

    public class Program
    {
        public static void Main()
        {
            var c = new Container();

            c.Register<ILogger, ConsoleLogger>(Reuse.Singleton);
            c.Register<Foo>();

            var foo = c.Resolve<Foo>();
            foo.DoSomething();
        }
    }
}
Автор: dadhi Размещён: 20.08.2016 09:45
Вопросы из категории :
32x32