Otofac içinde Modules konseptini arıyorsunuz. Mimarinizdeki her katman için, o katmanın türlerini kaydettiğiniz katman için yeni bir autofac modülü eklersiniz. Autofac kabınızı oluşturduğunuz ViewModelLocator
ürününüzde, tüm türleri doğrudan kaydetmek yerine sadece autofac modülleri kaydedersiniz. senin Company.Services
projede
:
Daha ayrıntılı olarak ve vaka için bu şuna benzer olabilir Böyle bir şey ile yeni bir modül ServicesModule
eklemek
. : En Company.ViewModels
projede
public class ServiceModule : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
// optional: chain ServiceModule with other modules for going deeper down in the architecture:
// builder.RegisterModule<DataModule>();
builder.RegisterType<CompanyService>().As<ICompanyService>();
// ... register more services for that layer
}
}
:
Ayrıca oluşturmak a ServiceModule
benzer tüm ViewModels kayıt ViewModelModule
. Biz ViewModelModule
içinde ServiceModule
kayıtlı beri, biz sadece ContainerBuilder
doğrudan ViewModelModule
kayıt zorunda
var builder = new ContainerBuilder();
builder.RegisterModule<ViewModelModule>();
builder.Build();
Not: En Company.Wpf
proje (ViewModelLocator
) olarak
public class ViewModelModule : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
// in your ViewModelModule we register the ServiceModule
// because we are dependent on that module
// and we do not want to register all modules in the container directly
builder.RegisterModule<ServiceModule>();
builder.RegisterType<MainViewModel>().AsSelf().InSingletonScope();
// ... register more view models
}
}
. Bu, Company.Wpf
projesinde Company.Service
projesine bir başvuru eklemenin gerekmemesi avantajına sahiptir.