Я довольно новичок в Autofac, и я пытаюсь установить публичное свойство в классе каждый раз, когда он инициализируется. Вот сценарий. У меня есть много классов, наследуемых от «лица», которые следуют этому основному формату ...Autofac Set Property to Instance
public class Person : Entity
{
public virtual DataContext ServiceContext { get; set; }
public string FirstName {get; set;}
...
}
Этих классы, как правило, быть реализован с помощью запроса LINQ, как это:
var context = SomeContext(connection);
var people = context.Query<Person>().Where(item => item.FirstName == "Joe").ToList();
То, что я пытаюсь для выполнения - передать объект «context» в свойство ServiceContext класса Person каждый раз при его создании. В этом примере каждое Person в списке людей будет иметь это свойство.
В идеале я бы передал DataContext через конструктор «Entity», но проблема в том, что у меня нет доступа к Entity или Linq-провайдеру, поскольку они принадлежат третьей стороне. Итак, мой вопрос заключается в использовании Autofac, как мне добавить «контекст» в свойство «ServiceContext» для каждого класса, который происходит от «Entity»? Похоже, что событие OnActivating близко к тому, что мне нужно, но я не могу заставить его работать.
Это не работает. Строка: builder.Register() дает ошибку компиляции, и я не вижу, где вы устанавливаете DataContext для объекта контекста? Я попробовал пару других вещей, таких как builder.RegisterInstance (контекст). Как () безрезультатно. –
Поскольку DataContext нуждается в строке подключения. исправлено. –
Я не думаю, что это сработает, потому что сторонний поставщик Linq, похоже, использует конструктор без параметров. Есть ли способ сделать это путем введения свойств во время активации? –