AutoFac недавно был обновлен для MVC 5.1, но на момент написания я обнаружил, что документации не хватает (особенно для простого примера).Как правильно зарегистрировать AutoFac на базовом веб-сайте MVC5.1?
Я хотел бы добавить зависимости в контроллеры MVC и зарегистрировать свои собственные реализации, например. e-mail (фактическая отправка и печать в окно вывода) в качестве базового примера.
Я не знаю, не хватает ли я для этого хорошего ресурса, и я слегка обеспокоен тем, что, поскольку он использует спецификацию OWIN, реализация может отличаться для MVC5.1 (идентификатор ASP.NET использует OWIN, и существует некоторые специальные атрибуты, используемые для правильного создания OWIN), поэтому вам нужно проверить, что я правильно понимаю.
У меня есть рабочий пример с приведенным ниже установочным кодом - это правильная и эффективная практика для стандартного веб-приложения MVC5.1?
Вопрос с бонусом: мне нужно добавить экземпляр InstancePerHttpRequest в строку RegisterControllers? i.e. 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();
}
}
Спасибо!
'InstancePerHttpRequest' осуждался для' AutoFac 3.4.0' и '4.0.0' замена быть' InstancePerRequest' , См. [Здесь] (https://github.com/autofac/Autofac/commit/78e3ff71286fab6185ea8a89ae622825afa741a5) – jbaum012
Добавление 'IoCConfig.RegisterDependencies();' to 'Global.asax' просит меня добавить соответствующее пространство имен. При этом я получаю следующую ошибку: «Ссылка на« Bootstrapper »не может быть добавлена. Добавление этого проекта в качестве ссылки вызовет циклическую зависимость. «Я знаю **, почему ** этой ошибки. Я хочу знать, как ** разрешить это? – barnes
Мне удалось запустить его после перемещения файла 'IocConfig.cs' в папку« App_Start ». Проблема из моего последнего комментария также была решена. Теперь я хочу знать, как ** поддерживать структуру папок? Каковы стандарты создания структуры папки/проекта при использовании autofac? Есть ли способ разместить файл 'IocConfig' в другой папке? Просьба предоставить ссылки (если таковые имеются). – barnes