2009-08-18 4 views
6

일부 Silverlight 구성 요소와 함께 ASP.Net 응용 프로그램에서 .Net RIA Services의 7 월 CTP를 사용하고 있습니다. Silverlight에서 RIA 서비스에 전화하고 있습니다..Net RIA Services : DomainService에 Parameterless 생성자가 필요합니까?

내 도메인 서비스 (LinqToEntitiesDomainService 개체)에서 Unity 및 생성자 종속성 주입을 사용하려고하면 문제가 발생합니다. 이제 Silverlight 응용 프로그램에서는 매개 변수없는 생성자가없는 것에 대해 불만을 토로합니다.

저는 매개 변수없는 생성자를 갖고 싶지 않습니다. Unity가 생성자 인수를 해결하기를 바랍니다. 이것이 가능한가? 내가 뭔가 잘못하고 있는거야? 또는 생성자 인수를 삽입하는 다른 방법을 찾아야합니까? 당신은 그것의 ctor에서 매개 변수와 함께 DomainService이 있고, 더 일반적으로 IoC 컨테이너 또는 의존성 주입의 일종을 통해 구축 될 필요가 있기 때문에

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 

답변

12

: 여기

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

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

    ... 

내가지고있어 오류 발생 시스템에서는 앱 수준 도메인 서비스 팩토리를 제공해야합니다. 그런 다음 공장에서 도메인 서비스를 인스턴스화 (및 삭제)해야하며, 경우에 따라 Unity와 같은 다른 API를 호출하여 팩토리를 호출 할 수 있습니다.

앱 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(); 
    } 
} 

희망을

다음은 기본 예제입니다!

+0

나는 그것을 찾고 있었다. 고마워요 :) – Davita

0

@ 브라이언, 나는 'IUserService'가 IUnitOfWork에 의존한다고 가정합니다. 여기서 IUnitOfWork는 DashboardEntities입니까?

UserRepository처럼

:

public class UserRepository : BaseRepository<User>, IUserRepository 
{ 
    protected BaseRepository(IUnitOfWork unitOfWork) 
    { 
    } 

    ... 
} 

그리고이 IUnitOfWork :

public partial class DashboardEntities : ObjectContext, IUnitOfWork 
{ 
    public const string ConnectionString = "name=DashboardEntities"; 
    public const string ContainerName = "DashboardEntities"; 

    public DashboardEntities() 
     : base(ConnectionString, ContainerName) 
    { 
     this.ContextOptions.LazyLoadingEnabled = true; 
    } 

    ... 
} 

나는이 디자인을 사용하고 있습니다. 내가 알아챈 한 가지는 DashboardEntities 클래스가 두 번 이상 만들어졌습니다. Unity에 의해 처음 만들어졌습니다 (Unity 구성에서 Singleton으로 선언 되었기 때문에 한 번만 생성됩니다).

그러나 다음 번에는 DomainService (DashboardService)에서 초기화하는 동안 새 DashboardEntities 클래스가 만들어 졌던 것 같습니다. DomainService가이 ObjectContext를 사용하지 않기 때문에 이것은 중요하지 않습니다. 저장소에서 Unity가 삽입 한 ObjectContext를 사용합니다.

누군가이 디자인을 확인하거나이 문제에 대해 좀 더 밝힐 수 있습니까?

관련 문제