Создайте экземпляр класса с зависимостями, используя Autofac

Проблема:

Предположим, класс:

public class MyAwesomeClass
{
   private IDependCls _dependCls;
   public MyAwesomeClass(IDependCls dependCls)
   {
       _dependCls = dependCls;
   }

}

И еще где-то мне нужно получить экземпляр этого класса, например так:

public class SomewhereElse
{
    public void AwesomeMethod()
    {
        //...
        // AwesomeStuff
        //...

        var GetErDone = new MyAwesomeClass();  // PROBLEM! No constructor with 0 arguements
    }
}

Вопрос в том, делаю ли я

Предложено решение 1:

A) нужно сделать дополнительный конструктор, который разрешает зависимость? Например:

   public MyAwesomeClass() // new constructor
   {
       _dependCls = DependencyResolver.Current.GetService<IDependCls>();
   }


public class SomewhereElse
{
    public void AwesomeMethod()
    {
        var GetErDone = new MyAwesomeClass();  // IT WORKS!!
    }
}

Предлагаемое решение 2:

B) использовать преобразователь внутри AwesomeMethodпрямо перед var GetErDone

public class SomewhereElse
{
    public void AwesomeMethod()
    {
        var depCls = _dependCls = DependencyResolver.Current.GetService<IDependCls>();
        var GetErDone = new MyAwesomeClass(depCls);  // IT WORKS!!
    }
}

Решение Autofac?

C) Какой-то другой способ Autofac?

Ищу передовой опыт, а также хорошее решение Autofac, если это возможно. Я думаю, что первый способ — худший, так как необязательные зависимости могут привести к большому беспорядку.

Резюме:

Как мне получить новый MyAwesomeClass(), когда MyAwesomeClassимеет зависимости?

12
задан Mihalis Bagos 30 May 2012 в 15:15
поделиться