Ленивый декоратор - лениво инициализированный тип не имеет publi c конструктора без параметров. - PullRequest
0 голосов
/ 27 мая 2020

Я не могу заставить работать приведенный ниже код .. Нужен ли мне другой класс, который имплементирует мой IComponent с констуктором без параметров?


public class Program
{
    public static void Main()
    {
        var lazy = new Lazy<IComponent>();

        IComponent comp = lazy.Value;

        var client = new ComponentClient(comp);

        client.Run();
    }
}

public interface IComponent
{
    void Something();
}

public class LazyComponent : IComponent
{
    public Lazy<IComponent> _LazyComponent { get; set ;}

    public LazyComponent(Lazy<IComponent> lazyComponent)
    {
        _LazyComponent = lazyComponent;
    }

    public void Something()
    {
        _LazyComponent.Value.Something();
    }
}

public class ComponentClient
{
    public IComponent _Component { get; set; }

    public ComponentClient(IComponent component)
    {
        _Component = component;
    }

    public void Run()
    {
        _Component.Something();
    }
}


1 Ответ

1 голос
/ 27 мая 2020

Вам нужно сообщить Ленивому, как создать компонент, задав ему фабричный метод.

https://docs.microsoft.com/en-us/dotnet/api/system.lazy-1?view=netframework-4.8

public class Program
{
    public static void Main()
    {
        var lazy = new Lazy<IComponent>(() => new RealComponent());
        var lazyComponent = new LazyComponent(lazy);
        var client = new ComponentClient(lazyComponent);

        client.Run();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...