У меня есть класс Caller
с одним конструктором по умолчанию и другим параметризованным конструктором, который я использую для внедрения зависимостей.
В одном месте класса Helper
у меня есть метод с именем DoSomething
, который ожидает Action<T>
, где T имеет тип Caller
.
Как передать экземпляр Caller
в качестве аргумента делегату Action, когда необходимо создать экземпляр Caller
с помощью параметризованного конструктора, чтобы в него была вставлена зависимость ?
Примечание: код написан только для того, чтобы сделать вопрос понятным.
public class Caller
{
private IServiceProvider _serviceProvider;
public string CallerName { get; set; }
public Caller()
{
// Do some initializations
}
public Caller(IServiceProvider serviceProvider) : this()
{
// Service Provider is injected to get some dependencies resolved later in the code.
_serviceProvider = serviceProvider;
}
}
public static class Helper
{
public static void DoSomething(Action<Caller> actOnCaller)
{
// Perform necessary stuff
}
}
public class Consumer
{
public Consumer()
{
// This works
Helper.DoSomething(c => { c.CallerName = "Test"; });
// How to pass an instance of Caller which I want with dependencies?
IServiceProvider serviceProvider = new MyServiceProvider();
var c2 = new Caller(serviceProvider);
// This does not work because of the scope of caller variable. I tried to "new-up" the Caller instance directly in lambda but that too didnt help.
Helper.DoSomething((c2 ) => { c2.CallerName = "Test Again"; });
}
}