あなたはModulesの概念をオートファックで探しています。アーキテクチャ内の各レイヤーに対して、そのレイヤーの新しいautofacモジュールを追加します。このモジュールでは、そのレイヤーのタイプを登録します。あなたのautofacコンテナを構築するViewModelLocator
では、すべてのタイプを直接登録するのではなく、autofacモジュールを登録するだけです。あなたのCompany.Services
プロジェクトで
:
より詳細には、あなたのケースのために、これは、このような何かを見ることができるあなたはこのようなもので、新しいモジュールを追加ServicesModule
。 :
あなた
Company.ViewModels
プロジェクトで
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
}
}
:また、あなたはServiceModule
に似たすべてのあなたのviewmodelsを登録ViewModelModule
を作成
。我々はViewModelModule
内ServiceModule
を登録しているので、私達はちょうどContainerBuilder
に直接ViewModelModule
を登録する必要があること
var builder = new ContainerBuilder();
builder.RegisterModule<ViewModelModule>();
builder.Build();
注:お使いのCompany.Wpf
プロジェクト(ViewModelLocator
)で
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
}
}
。これには、Company.Wpf
プロジェクト内のCompany.Service
プロジェクトへの参照を追加する必要がないという利点があります。