Так что я использую autofac в MVC, поэтому мои контроллеры могут иметь там зависимости, вложенные там конструктором, у меня есть в моем Global.asax. У меня есть следующий фрагмент кода, который работает.Использование Autofac для регистрации всего, что заканчивается сервисом
// Register your MVC controllers.
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<PurchaseOrderSearchService>().As<IPurchaseOrderSearchService>().WithParameter("context", new PurchaseOrderManagerContext());
// Set the dependency resolver to be Autofac.
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
Проблема заключается в том, я не хочу делать builder.RegisterType снова и снова, все мои услуги. Итак, как мне это сделать?
Я думаю, что-то, что я хочу
builder.RegisterAssemblyTypes(foo)
.Where(t => t.Name.EndsWith("Services"))
.WithParameter("context", new PurchaseOrderManagerContext());
Но понятия не имею, что Foo не должно быть. Или если RegisterAssemblyTypes правильный путь. Я знаю, что кодирование по соглашению является решением, но не уверен, что такое соглашение. Все мои услуги закончится ИНТ слово Service и будет иметь интерфейсу
так FooService будет иметь интерфейс IFooService и BarService будет иметь интерфейс IBarService
Следует также отметить, что все услуги, жить в библиотеке классов под названием PurchaseOrderManager. Служба
Привет, я думаю, это то, что я хочу ... но у меня есть все службы, живущие в библиотеке классов под названием PurchaseOrderManager.Service, так что это ошибка бросания. Ни один из конструкторов, найденных с помощью «Autofac.Core.Activators.Reflection.DefaultConstructorFinder 'on type' PurchaseOrderManager.Controllers.PurchaseOrderSearchController 'может быть вызван с доступными службами и параметрами: Не удается разрешить параметр' PurchaseOrderManager.Service.Services.Interfaces.IPurchaseOrderSearchService service 'конструктора' Void .ctor (PurchaseOrderManager.Service.Services.Interfaces .IPurchaseOrderSearchService). –
Ответ обновлен. – Richard
Я пошел с автофокусом. Я защитил переопределение аннулируется нагрузки (ContainerBuilder строитель) { // «ThisAssembly» означает «любые типы в той же сборке, что и модуль» builder.RegisterAssemblyTypes (ThisAssembly) .гд (т => t.Name.EndsWith («Услуги»)) . С параметром «контекст», новый PurchaseOrderManagerContext()) .AsImplementedInterfaces(); } Но это никогда не получится вызвано, так как оно не переусердствует ничем как его класс libary –