Я прочитал несколько статей о том, нужно ли выполнять интенсивные операции с ресурсом в конструкторе. Некоторые из них говорят, что если это не влияет на SRP или Testability, тогда это нормально. Я хочу получить мнение о наилучшей практике для этого сценария.Autofac, инициализируя контейнер в конструкторе
Я следую принципу принципа корневого принципа, упомянутому here в моем проекте ASP.Net WebApi2, и мои контроллеры имеют введенные им зависимые объекты. Вместо того, чтобы вводить только несколько зависимостей, я хочу ввести весь контейнер и получить любую из зависимостей. У меня есть этот класс, где я настраиваю свойство контейнера в конструкторе. Я не знаю, относится ли это к плохой практике.
public class AppContainer : IAppContainer
{
private readonly ContainerBuilder _builder ;
private IContainer _container ;
public AppContainer()
{
_builder = new ContainerBuilder();
_builder.RegisterAssemblyModules(_assembly);
_container = _builder.Build();
}
public ContainerBuilder ContainerBuilder
{
get { return _builder; }
}
public IContainer Container
{
get { return _container;}
}
}
Является ли это плохой дизайн, чтобы вызвать .Build()
в конструкторе, как это сделано выше? Я хочу сделать это так, чтобы свойства AppContainer
были инициализированы во время создания экземпляра и не ожидали вызова какого-либо метода для сохранения значений.
Теперь в мой контроллер, вместо того, что-то вроде этого
public class HomeController : ApiController
{
private readonly IBusiness _bus;
public HomeController(IBusiness bus)
{
_bus = bus;
}
я могу иметь что-то вроде этого и подвергать контейнер непосредственно. Таким образом, определение конструктора моего контроллера не менять каждый раз мне нужна новая зависимость впрыскивается в.
public class HomeController : ApiController
{
private readonly IAppContainer _container;
public HomeController (IAppContainer container)
{
_container = container;
}
Я не вижу в этом никаких проблем –