2016-10-18 2 views
0

서비스 팩키지에서 실행중인 7 개의 서비스가 있습니다. 코드가 매우 일반적 일 수 있기 때문에 일반적인 OwinCommunicationsListener 클래스를 만들기로 결정했습니다. 일반 OwinCommunicationsListener를 사용하여 상태없는 서비스에 종속성 삽입을 추가하는 방법

나는 서비스 패브릭의 템플릿 내가 DI 작업을 수행해야하는 경우 작업

internal sealed class WebService : StatelessService 
{ 
    public WebService(StatelessServiceContext context) 
     : base(context) 
    { } 

    /// <summary> 
    /// Optional override to create listeners (like tcp, http) for this service instance. 
    /// </summary> 
    /// <returns>The collection of listeners.</returns> 
    protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() 
    { 
     return new ServiceInstanceListener[] 
     { 
      new ServiceInstanceListener(serviceContext => new OwinCommunicationListener(Startup.ConfigureApp, serviceContext, ServiceEventSource.Current, "ServiceEndpoint")) 
     }; 
    } 
} 

로 전달하는 정적 클래스로 시작 클래스 (파이프 라인을 구성하는)과 비 저장 서비스 클래스를 설정하는 것으로 나타났습니다 그 객체들을 시작 클래스에 전달해야합니다. 템플릿에서 볼 수있는 유일한 방법은 OwinCommunicationsListener에서 이러한 객체를 설정하거나 OwinCommunicationsListener에 매개 변수를 전달하는 것입니다. OwinCommunicationsListener가 덜 일반적이라는 것을 의미합니다.

예를 들어 WordCount 예제에서 정상적인 시작 클래스와 함께 OwinCommunicationsListenter에 대한 참조가 전달되었습니다. 이 방법으로 ServiceClass는 DI와 OwinCommunicationsListener에 사용할 수있는 Startup에 일부 객체를 전달할 수 있습니다. 나는 두뇌와 여러 서비스가 공유하는 일반적인 도우미로 OwinCommunicationsListener 클래스와 비 저장 서비스 클래스를 생각하면

public class WordCountWebService : StatelessService 
{ 
    public WordCountWebService(StatelessServiceContext context) 
     : base(context) 
    { 
    } 

    /// <summary> 
    /// Creates a listener for Web API with websockets. 
    /// </summary> 
    /// <returns>The OWIN communication listener.</returns> 
    protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() 
    { 
     return new[] 
     { 
      new ServiceInstanceListener(initParams => new OwinCommunicationListener("wordcount", new Startup(MyDIObject), initParams)) 
     }; 
    } 
} 

, 내가 단어 수 예와 같은 경로를 이동하고, 비 정적 시작을 해봐야 할 것 같습니다 수업. 이 접근법에 단점이 있습니까? 마이크로 서비스의 아이디어가 우리에게 많은 것을 갖게하고 일반적인 스 캐 폴딩이 유지 보수와 신뢰성을 향상시킬 수있을 때 템플릿이 그러한 접근법을 사용하지 않는 이유가 궁금했습니다.

답변

2

단어 수는 내가 권장하는 예입니다. 내가 아는 단점도 없습니다.

ASP.NET 코어를 보았습니까? DI가 내장 된 IWebHost를 사용하면 더 쉽게 얻을 수 있습니다. 다음은 예입니다. https://github.com/vturecek/service-fabric-xray/blob/master/src/xray.Data/DataService.cs

+0

단어 수에 대한 보증에 감사드립니다. 모든 CommunicationsListener, HttpClient 및 factory, 예외 처리기는 이제 내 앱에서 추상화되었으며 모든 10 개의 서비스는 이제이를 공통으로 사용하고 있습니다. 비 SF 랩퍼 용 코어를 사용하고 있지만 "미리보기"로 표시된 SF의 코어 템플리트를 사용하면 대부분 asp.net을 신뢰하고 유지해야합니다. :-) 서비스는 인증, 데이터 보안 등을 다루기 때문에 "용감한"영역이 필요하지 않습니다! 필자는 궁극적으로 로깅 및 구성과 같이 코어로 쉽게 전환 할 수 있도록 코어와 유사한 패턴을 만들었지 만 아직 DI를 모방하지는 못했습니다. – MarkD

+0

충분합니다. "미리보기"태그에 대해 자세히 설명하기 위해 주로 웹 호스트 (WebListener)를 가리키며 1.0 RC2 릴리스가 있으므로 미리보기 태그가 곧 사라집니다. 그렇지 않으면 ASP.NET Core가 공식적으로 릴리스되어 버전 1.0에서 지원됩니다. –

관련 문제