我正在基于一些旧代码创建新的WCF服务。我认为我所做的一切都一样,但是在使用DI创建类的过程中出现错误:
没有为此对象定义无参数构造函数。
以下是我的新代码,该代码是在工作代码的基础上完成的:
public SChangeclaimHandlerStatusDTO ChangeclaimHandler(SChangeclaimHandlerMessageDTO message)
{
(...)
var status =
ServiceProvider<VIG.ZEVIG.BusinessLayer.BusinessLogic.Order.S.SIntegrationService>
.Service.ChangeclaimHandler(message);
//line above is causing error
(...)
return status;
}
以下称为类:
public class SIntegrationService : ServiceBase
{
private const int SImageExpirationTimeInminutes = 60;
public SIntegrationService(
IDocumentService documentService,IAttachmentService attachmentService,IUserService userService,ITextEncryptor textEncryptor,(...) )
{
RegisterService<IDocumentService>(documentService);
RegisterService<IAttachmentService>(attachmentService);
RegisterService<IUserService>(userService);
RegisterService<ITextEncryptor>(textEncryptor);
(...)
}
}
public class ServiceBase : IBusinessService
{
public ServiceBase();
public ServiceBase(Dictionary<Type,object> dependencies);
protected IAppContext ApplicationContext { get; }
protected void RegisterService<T>(T dependency) where T : class;
}
和ServiceProvider类如下:
public class ServiceProvider<T> where T : class
{
public ServiceProvider();
public static T Service { get; }
}
SIntegrationService类只有一个构造函数(没有无参数构造函数)。 这两个程序都有引用SimpleInjector。
我对DI很陌生,所以也许我缺少明显的东西,也许我应该在配置文件中放一些东西,以使我知道将包括DI? 我知道应该以这种方式工作,因为我盯着其他工作正常的项目中的代码。
在其他项目配置中,我也有这行:
<Services
AutoWire="false"
IocContainer="V.Common.Ioc.SimpleInjector.SimpleInjectorContainerAdapter,V.Common.Ioc.SimpleInjector"/>
也许这就是解决方案?
下面是错误详细信息:
System.MissingMethodException HResult = 0x80131513
Message =没有为此对象定义无参数的构造函数。
源“ mscorlib”字符串
System.RuntimeTypeHandle.CreateInstance上的StackTrace”(RuntimeType>类型,布尔publicOnly,布尔noCheck,布尔&canBeCached,> RuntimeMethodHandleInternal&ctor,布尔&bNeedSecurityCheck)\ r \ n
在System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis,布尔值fillCache,StackCrawlMark和stackMark)\ r \ n位于 System.RuntimeType.CreateInstanceDefaultCtor(布尔publicOnly, 布尔skipCheckThis,布尔fillCache,StackCrawlMark& stackMark)\ r \ n位于System.activator.CreateInstance(Type type,Boolean 非公开)\ r \ n(位于System.activator.CreateInstance(类型类型)\ r \ n
在V.Common.Services.ServiceProvider`1.get_Service()\ r \ n在 BusinessServices.SIntegration.SIntegrationService.ChangeclaimHandler(SChangeclaimHandlerMessageDTO 消息)在D:\ TFS1 \ Branches \ Release 1.2.1中 Env01 \ ZV \ BusinessServices.SIntegration \ SOrderService.svc.cs:line 31 \ r \ n在SyncInvokeChangeclaimHandler(Object,Object [],Object [] )\ r \ n在 System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(对象 实例,Object []输入,Object []&输出)\ r \ n位于 System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)“字符串