我喜欢通过在配置文件中设置serviceActivations来托管没有.svc文件的服务的WCF 4.0功能。它使用默认服务工厂很好用但现在我尝试使用AutofaServiceHostFactory做同样的事情,所以我的依赖项将被正确注入。在我尝试的所有场景中,当我尝试访问服务时仍然出现此错误:服务' WCFAutofacWiring.MyService'为WCF配置的未在Autofac容器中注册。我在一个空的asp.net网站上托管我的服务。这就是我的所作所为:
Web.config:
<serviceHostingEnvironment>
<serviceActivations>
<add factory="Autofac.Integration.Wcf.AutofacServiceHostFactory"
relativeAddress="~/WASCurrentTime.svc"
service="WCFAutofacWiring.MyService" />
</serviceActivations>
</serviceHostingEnvironment>
然后,我在app_code文件夹中放入一个文件来注册我的依赖关系,如Autofac文档(Autofac WcfIntegration)中所述,我向调试器确认在服务启动时调用了代码:
public static class AppStart
{
public static void AppInitialize()
{
AutofacHostFactory.Container = new AutofacBootstrapper().Configure();
}
}
最后,这是我的注册:
public class AutofacBootstrapper
{
public IContainer Configure()
{
var builder = new ContainerBuilder();
// register types
builder.Register<ILanguageProvider>(x => new MyLanguageProvider("en-US"));
builder.RegisterType<MyService>();
return builder.Build();
}
}
如果使用.svc文件而不是serviceActivation,我的服务工作正常,但我觉得创建.svc文件是浪费,如果唯一的原因是设置我可以在web.config中指定的工厂。
有什么想法吗?
由于
答案 0 :(得分:5)
根据Autofac source,如果具有给定字符串的键控分辨率(来自config)或使用Type.GetType
的键入分辨率对于给定字符串失败,则抛出异常。
在您的情况下,Type.GetType
方法可能会返回null
,因为您尚未在配置中指定Type.AssemblyQualifiedName
。
尝试获取typeof(MyService).AssemblyQualifiedName
并将其插入配置中。