我有一个包含
的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服务做同样的事情吗?
此致
答案 0 :(得分:1)
我可以在您的解决方案中看到两个应用程序。第一个应用程序是MVC项目。第二个应用程序是WCF服务。其他项目是类库而不是应用程序。
您需要做的是确保只有应用程序具有Composition Roots,即只有应用程序才能在其入口点组成对象。
引用文章引用:
只有应用程序应具有组合根。图书馆和框架不应该。
因此,您应该引用DI容器的唯一地方是两个提到的应用程序。因此,在您的情况下,这意味着您应该在WCF服务项目中注册服务和模型库中的类型。服务和模型库不应该对DI容器有任何引用。