gpt4 book ai didi

.net - 在多项目解决方案中使用 autofac

转载 作者:行者123 更新时间:2023-12-03 21:31:18 25 4
gpt4 key购买 nike

我有大型 wpf 应用程序。我用autofac简化了我的问题。假设我有 ViewModelLocator 我在其中创建约束器。 ViewModelLocator 在 Company.WPF 项目中,这个项目是指 Company.ViewModels 项目。

var builder = new ContainerBuilder();
builder.RegisterType<MainWindowViewModel>().AsSelf().SingleInstance();
container = builder.Build();

问题:MainWindowViewModel 需要 Company.Services 项目中的 ICompanyService(我使用 CI),该项目不应被 Company.WPF 引用。 ICompanyService 是公共(public)的,并且在同一个项目(Company.Services)中也是实现 CompanyService,但它只是内部的。

如何为这些设置 Autofac?我通常使用 castel Wisndor,这些情况有安装程序,Autofac 中是否也有类似的选项?

最佳答案

您正在寻找 Modules 的概念在autofac中。对于架构中的每一层,您都为该层添加一个新的 autofac 模块,您可以在其中注册该层的类型。在您的 ViewModelLocator ,在您构建 autofac 容器的地方,您只需注册 autofac 模块,而不是直接注册所有类型。

更详细地说,对于您的情况,这可能看起来像这样:

在您的 Company.Services项目:

您添加了一个新模块 ServicesModule像这样的东西。 :

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
}
}

在您的 Company.ViewModels项目:

您还创建了一个 ViewModelModule您在其中注册所有 ViewModel,类似于 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
}
}

在您的 Company.Wpf项目(ViewModelLocator):
var builder = new ContainerBuilder();
builder.RegisterModule<ViewModelModule>();
builder.Build();

请注意,由于我们注册了 ServiceModuleViewModelModule 内,我们只需要注册 ViewModelModule直接在 ContainerBuilder .这样做的好处是不需要添加对 Company.Service 的引用。 Company.Wpf 内的项目项目。

关于.net - 在多项目解决方案中使用 autofac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35254557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com