как передать универсальный интерфейс в конструкторе класса с типом этого класса с помощью autofac - PullRequest
0 голосов
/ 11 октября 2019

У меня есть следующие классы и интерфейсы в c #. Я не могу понять, как зарегистрировать их в AutoFac.

    public interface ICustomer{void Validate();}
    public interface IValidation<T>{void Validate(T obj);}
    public class CustomerBase : ICustomer
    {
        private IValidation<ICustomer> validation = null;
        public CustomerBase(IValidation<ICustomer> obj)
        {
            validation = obj;
        }
        public virtual void Validate()=>validation.Validate(this);

    }
    public class Lead : CustomerBase
    {
        public Lead(IValidation<ICustomer> obj) : base(obj){}
    }
    public class LeadValidation : IValidation<ICustomer>
    {
        public void Validate(ICustomer obj){//Now validation Here......}
    }

1 Ответ

0 голосов
/ 11 октября 2019

Вам необходимо зарегистрировать свои компоненты для внедрения зависимостей. Это делается путем создания ContainerBuilder и регистрации ваших компонентов.

// create the ContainerBuilder
var builder = new ContainerBuilder();

// register your components
builder.RegisterType<MyConcreteType1>().As<IMyInterface1>();
builder.RegisterInstance(new MyConcreteType2()).As<IMyInterface2>();
...

// build your container
var myContainer = builder.Build();

А затем, чтобы получить необходимый компонент, все, что вам нужно сделать, это

// create a scope so AutoFac will take care of 
// disposing of objects you no longer need
using (var scope = myContainer.BeginLifetimeScope())
{
  // resolve the components you need. AutoFac will take care of
  // resolving their dependencies and instantiating them for you
  var requiredComponent = scope.Resolve<IMyInterface1>();

  // now you can use your components!
}

Вот очень полезное видео, котороепоможет вам понять, как использовать AutoFac и его назначение: https://www.youtube.com/watch?v=mCUNrRtVVWY

...