wcf - 在 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();
}
}
解决方案
根据显示的代码,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();
}
容器需要知道如何解析合约类型,因为它被用于管理服务主机中的依赖注入。
推荐阅读
- html - 我如何等到对象存在才能加载 html
- python-3.x - 应用层回复包
- android - Webrtc 摄像头流实时绘图
- javascript - 如何在猫鼬中使用 find() 函数获取选定的输出?
- php - laravel 卡在 Flash 消息中
- powershell - [Net.SecurityProtocolType] 枚举常量的意义?
- amazon-web-services - 如何从 cloudformation 模板中的参数文件传递公钥?
- php - Laravel 8:多选选项不发送数据
- python - 如何处理 Pandas 中的记录以查找“真”和“假”的总时间,然后再找到“真”以获取特定日期的排序数据
- javascript - 为什么我无法使用通过 firebase 从 facebook sdk 获得的凭据登录?