AutoFac недавно был обновлен для MVC 5.1, но на момент написания я обнаружил, что документации нет (особенно для простого примера).
Я хотел бы добавить зависимости в MVC-контроллеры и зарегистрировать мои собственные реализации, например. e-mail (фактическая отправка и печать в окно вывода) в качестве базового примера.
Я не знаю, не хватает ли я для этого хорошего ресурса, и я слегка обеспокоен тем, что, поскольку он использует спецификацию OWIN, реализация может отличаться для MVC5.1 (ASP.NET Identity использует OWIN, и есть некоторые специальные атрибуты, используемые для правильного создания OWIN), поэтому вам нужно проверить, что я прав.
У меня есть рабочий пример с приведенным ниже установочным кодом - это правильная и правильная практика для стандартного веб-приложения MVC5.1?
Бонусный вопрос: мне нужно добавить экземпляр InstancePerHttpRequest в строку RegisterControllers? то есть builder.RegisterControllers(typeof (MvcApplication).Сборка).InstancePerHttpRequest();
(Примечание. Я вижу примеры в GitHub от Autofac, но не могу найти простой пример, соответствующий MVC5.1.)
public static void RegisterDependencies()
{
// Register MVC-related dependencies
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterModelBinders(typeof(MvcApplication).Assembly);
builder.RegisterModule<AutofacWebTypesModule>();
// Register e-mail service
builder.RegisterType<EmailSenderToDebug>().As<IEmailSender>().InstancePerHttpRequest();
builder.RegisterModelBinderProvider();
// Set the MVC dependency resolver to use Autofac
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
И мой контроллер:
public class HomeController : Controller
{
public IEmailSender _email { get; set; }
public HomeController(IEmailSender es)
{
this._email = es;
}
//
// GET: /Home/
public ActionResult Index()
{
Email e = new Email();
e.To(new MailAddress("[email protected]", "mr. something"));
e.Subject("test");
e.Message("hello world");
e.From(new MailAddress("[email protected]", "mr. else"));
this._email.SendEmail(e);
return View();
}
}
Спасибо!