Я новичок в Autofac. Я пытаюсь интегрировать autofac с приложением asp.net mvc с полным решением после шаблона репозиторияAutofac Lifetime Scope с ASP.NET MVC
Ниже приведена конфигурация, которую я сделал.
MvcProject.Website.Global.asax.cs
..Application_start() {
App_Start.AutofacConfig.ConfigureContainer();
}
MvcProject.Website.App_Start.AutofacConfig.cs
ПРИМЕЧАНИЕ: Я зарегистрировал RegisterTypes в качестве модулей в различные проекты и привязать их к следующему основному файлу конфигурации.
public static class AutofacConfig
{
public static void ConfigureContainer()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly).PropertiesAutowired();
//Register Repository dependencies
builder.RegisterModule(new RepositoryModule("mssql"));
//Register Application dependencies
builder.RegisterModule(new ApplicationModule());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}
Затем в слое приложений, регистрация Тип сделано путем расширения модуля абстрактного класса
MvcProject.Application.ApplicationModule.cs
public class ApplicationModule : Module
{
protected override void Load(Containerbuilder builder)
{
builder.RegisterType<MyService>.InstancePerLifetimeScope();
base.Load(builder);
}
}
Затем из контроллера
MvcProject.Website.Controllers.MyController.cs
public class MyController : Controller
{
private ILifetimeScope _scope;
public MyController(ILifetimeScope scope)
{
_scope = scope;
}
public ActionResult SayHello()
{
using (var localscope = _scope.BeginLifetimeScope())
{
var service = localscope.Resolve<MyService>();
var viewModel = service.GetMyViewModel();
return View(viewModel);
}
}
}
Мои основные вопросы:
- , чтобы избежать проблем утечки памяти, мы должны определить прижизненные областей (как в приведенном выше SayHello MyController в действие) в контроллерах MVC или это НЕ необходимо для MVC?
- Передача Типового регистра на отдельные проекты с использованием модуля является правильным способом или есть лучший/правильный способ?
- Есть ли лучший способ получить ILifetimeScope внутри MyController, не передавая параметр «ILifetimeScope» из конструктора контроллера?
Благодарим вас заранее.
Благодарим за подробный ответ. – scFootsteps
Спасибо за подробный ответ. Я прочитал следующую статью, и было принято решение использовать lifetimecope, чтобы избежать утечек памяти. http://nblumhardt.com/2011/01/an-autofac-lifetime-primer/. Итак, я думаю, что это не применимо к веб-запросам? – scFootsteps
Вы хотите использовать шкалы времени жизни. Он применим к MVC. Просто с интеграцией Autofac, это позаботится о вас. –