Autofac 与类库

问题描述 投票:0回答:1

我有一个 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 服务做同样的事情吗?

c# dependency-injection autofac
1个回答
2
投票

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

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

引用参考文章:

只有应用程序才应具有组合根。库和框架不应该。

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

© www.soinside.com 2019 - 2024. All rights reserved.