首页 > 解决方案 > 在 Console App 内的 Autofac Container 中注册 WCF 服务

问题描述

我在一个单独的项目中有带有 WCF 的 .NET 4.8 控制台应用程序。我已经在 Autofac 容器中注册了我的所有类,然后是 MyServiceManager,它是 ServiceContract 的实现,但出现错误,不确定我在拼图中缺少什么

错误

System.ArgumentException: 'The service contract type 'App.WCF.Service.ServicesManager.MyServiceManager' has not been registered in the container.

参数名称:contractType'

控制台应用

 public static void Main(string[] args)
    {
        Console.WriteLine("Initialise Application....");

        var buildContainer = CompositionRoot();

        ServiceHost appHostServices = new ServiceHost(typeof(MyServiceManager));
        appHostServices.AddDependencyInjectionBehavior<MyServiceManager>(buildContainer); //Getting Error Here
        appHostServices.Open();
        Console.WriteLine("opening webservices....");
        
        buildContainer.Resolve<MyApplication>().Run();

        Console.ReadLine();
        appHostServices.Close();
    }

    private static IContainer CompositionRoot()
    {
        ContainerBuilder builder = new ContainerBuilder();
        builder.RegisterType<MyApplication>();
        builder.RegisterType<CallMyMessage>().As<ICallMyMessage>();
        builder.RegisterType<Message>().As<IMessage>();

        return builder.Build();
    }

}

标签: wcfdependency-injectionautofac.net-4.8

解决方案


根据显示的代码,MyServiceManager未在容器中注册。

private static IContainer CompositionRoot()
{
    ContainerBuilder builder = new ContainerBuilder();
    builder.RegisterType<MyApplication>();
    builder.RegisterType<CallMyMessage>().As<ICallMyMessage>();
    builder.RegisterType<Message>().As<IMessage>();

    builder.RegisterType<MyServiceManager>(); //<-- Was missing

    return builder.Build();
}

容器需要知道如何解析合约类型,因为它被用于管理服务主机中的依赖注入。


推荐阅读