gpt4 book ai didi

c# - .Net RIA 服务 : DomainService Needs a Parameterless Constructor?

转载 作者:太空狗 更新时间:2023-10-29 21:07:32 27 4
gpt4 key购买 nike

我在带有一些 Silverlight 组件的 ASP.Net 应用程序中使用 .Net RIA 服务的七月 CTP。我正在从 Silverlight 调用 RIA 服务。

当我尝试在我的领域服务(一个 LinqToEntitiesDomainService 对象)中使用 Unity 和构造函数依赖注入(inject)时,我的问题出现了。 Silverlight 应用程序现在提示没有无参数构造函数。

我不想有一个无参数的构造函数,我希望 Unity 解析构造函数参数。这可能吗?难道我做错了什么?或者我应该找到另一种方法来注入(inject)我的构造函数参数吗?

public class DashboardService : LinqToEntitiesDomainService<DashboardEntities>
{
private IUserService userService;

public DashboardService(IUserService userService)
: base()
{
if (userService == null)
{
throw ExceptionBuilder.ArgumentNull("userService");
}
this.userService = userService;
}

...

这是我遇到的错误:

Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Timestamp: Tue, 18 Aug 2009 14:34:54 UTC


Message: Unhandled Error in Silverlight 2 Application No parameterless constructor defined for this object. at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)
at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Web.DomainServices.DomainService.DefaultDomainServiceFactory.CreateDomainService(Type domainServiceType, DomainServiceContext context)
at System.Web.Ria.DataServiceFactory.GetDataService(HttpContext context)
at System.Web.Ria.DataServiceFactory.System.Web.IHttpHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated)
Line: 1
Char: 1
Code: 0
URI: http://dev.localhost/Home

最佳答案

由于您有一个在其构造函数中带有参数的 DomainService,并且通常需要通过某种 IoC 容器或依赖项注入(inject)系统来构建,因此您需要提供一个应用级域服务工厂。然后,您的工厂负责实例化域服务(并处理它),它可以通过调用另一个 API(例如您的情况下的 Unity)来实现。

这是一个基本的例子:

在您应用的 Global.asax.cs 中,添加以下内容:

public class Global : HttpApplication {

static Global() {
DomainService.Factory = new MyAppDomainServiceFactory();
}
}

internal sealed class MyAppDomainServiceFactory : IDomainServiceFactory {

public DomainService CreateDomainService(Type domainServiceType,
DomainServiceContext context) {
DomainService ds = ... // code to create a service, or look it up
// from a container

if (ds != null) {
ds.Initialize(context);
}
return ds;
}

public void ReleaseDomainService(DomainService domainService) {
// any custom logic that must be run to dispose a domain service
domainService.Dispose();
}
}

希望对您有所帮助!

关于c# - .Net RIA 服务 : DomainService Needs a Parameterless Constructor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1294331/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com