我有一个 C# 解决方案,其中包含
-MVC project
-WCF Project
-Service library
-Model (Entity Framework)
MVC 项目正在从 Web 服务获取所有数据。 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服务。其他项目是类库而不是应用程序。
您需要做的是确保只有应用程序具有组合根,即只有应用程序应该在其入口点组合对象。
引用参考文章:
只有应用程序才应具有组合根。库和框架不应该。
因此,您应该引用 DI 容器的唯一地方是提到的两个应用程序。因此,就您的情况而言,这意味着您应该在 WCF 服务项目中注册服务和模型库中的类型。服务和模型库不应有任何对 DI 容器的引用。