Bạn đang tìm kiếm khái niệm về Modules trong autofac. Đối với mỗi lớp trong kiến trúc của bạn, bạn thêm một mô-đun autofac mới cho lớp đó, nơi bạn đăng ký các loại lớp đó. Trong ViewModelLocator
, nơi bạn xây dựng hộp chứa autofac, bạn chỉ cần đăng ký các mô-đun autofac thay vì đăng ký trực tiếp tất cả các loại.
Cụ thể hơn và đối với trường hợp của bạn này có thể giống như thế này:
Trong dự án Company.Services
của bạn:
Bạn thêm một module mới ServicesModule
với một cái gì đó như thế này. :
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
}
}
Trong dự án Company.ViewModels
của bạn:
Bạn cũng tạo ra một ViewModelModule
nơi bạn đăng ký tất cả ViewModels của bạn tương tự như ServiceModule
.
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
}
}
Trong dự án của bạn Company.Wpf
(ViewModelLocator
):
var builder = new ContainerBuilder();
builder.RegisterModule<ViewModelModule>();
builder.Build();
Lưu ý rằng kể từ khi chúng tôi đăng ký ServiceModule
trong ViewModelModule
, chúng tôi chỉ phải đăng ký ViewModelModule
trực tiếp trong ContainerBuilder
. Điều này có lợi thế là không cần phải thêm tham chiếu đến dự án Company.Service
trong dự án Company.Wpf
.
Nguồn
2016-02-07 16:57:22