我有一个WCF应用程序,正在其中监听消息。 EventHandler使用ServiceClient,后者使用HttpClient调用另一个API。
IoC类:
public static class IoC
{
public static IContainer Initialize()
{
ObjectFactory.Initialize(x =>
{
// Handlers
x.For<IHandle>().Use<EventHandler>();
// Service Clients
x.For<HttpClient>().Use<HttpClient>();
x.For<IServiceClient>().Use<ServiceClient>();
});
return ObjectFactory.Container;
}
}
我尝试在初始化之后但在返回之前添加此内容:
ObjectFactory.Configure(x =>
{
x.Scan(scan =>
{
scan.LookForRegistries();
scan.Assembly("System.Net.Http");
});
});
但是,标题仍然有异常。
我能够解决此问题。问题是我使用的是旧版本的StructureMap(v2.6.4.1),它与System.Net.Http版本= 4.2.0.0不兼容。由于最新版本不存在ObjectFactory,因此更新到最新版本并进行了一些调整后,我得到了一个错误:
没有默认实例注册,并且无法自动确定类型'System.Net.Http.HttpMessageHandler'] >>
这是因为StructureMap默认尝试使用最贪婪的构造函数。为了解决这个问题,我将HttpClient的DI更改为此:
x.For<HttpClient>().Use<HttpClient>().SelectConstructor(() => new HttpClient());