gpt4 book ai didi

c# - 带类库的 Autofac

转载 作者:行者123 更新时间:2023-11-30 17:40:52 25 4
gpt4 key购买 nike

我有一个 C# 解决方案包含

-MVC project
-WCF Project
-Service library
-Model (Entity Framework)

MVC 项目正在从网络服务获取所有数据。WCF 服务正在从服务库中获取数据。

我现在正在尝试使用 Autofac 实现 DI。

到目前为止我所做的是在服务库中创建树类。

public class ServiceModule : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterAssemblyTypes(Assembly.Load("Foot.Service"))
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces()
.InstancePerLifetimeScope();
}
}

public class EFModule : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType(typeof(FootContext)).As(typeof(IContext)).InstancePerLifetimeScope();
}
}

public class Init
{
public Init()
{
//Autofac Configuration
var builder = new Autofac.ContainerBuilder();
builder.RegisterModule(new ServiceModule());
builder.RegisterModule(new EFModule());
var container = builder.Build();

}
}

这是正确的方法吗?然后调用WCF库中的Init()?

我应该为 WCF 服务做同样的事情吗?

问候

最佳答案

我可以在您的解决方案中看到两个应用程序。第一个应用程序是 MVC 项目。第二个应用程序是 WCF 服务。其他项目是类库而不是应用程序。

您需要做的是确保只有应用程序具有 Composition Roots ,即只有应用程序应该在其入口点组合对象。

引自引用文章:

Only applications should have Composition Roots. Libraries and frameworks shouldn't.

因此,唯一应该引用 DI 容器的地方是上面提到的两个应用程序。因此,在您的情况下,这意味着您应该在 WCF 服务项目中注册服务和模型库中的类型。服务和模型库不应引用 DI 容器。

关于c# - 带类库的 Autofac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33803010/

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