2017-03-13 6 views
-3

인터페이스를 객체 클래스로 사용하고 싶습니다. Orchard와 같은 일부 CMS에서 보는 것과 같습니다. 예를 들어 내용에 대해 많은 작업을 수행하는 객체와 같은 IContentManager 인터페이스를 사용할 수 있습니다. 또는 ViewModel (첫 번째 인터페이스가 우선)으로 인터페이스를 사용합니다. 내가인터페이스를 객체 클래스로 사용하는 방법

public class BLL_DependencySetup : Autofac.Module 
{ 
    protected override void Load(ContainerBuilder builder) 
    { 
     builder.RegisterType<RoleService>().As<IRoleService>(); 
     builder.RegisterType<RoleMV>().As<IRole>().InstancePerDependency(); 
     base.Load(builder); 
    } 
} 

같은 몇 가지 일을 Autofac을 사용하지만, 실제로는 정확히 내가 원하는 걸 좋아하지.

public class ISRelatedContentsDriver : ContentPartDriver<ISRelatedContentsPart> 
{ 
    private readonly IContentManager _contentManager; 

    public ISRelatedContentsDriver(IContentManager contentManager) 
    { 
     _contentManager = contentManager; 
    } 

위와 같이 몇 가지 작업을 수행하고 싶습니다. IoC와 관련이 있습니까? 편집 : 나는 그것이 어떻게 작동하는지 알고 싶다. 그리고 내 자신의 아키텍처에서 그것을 사용합니다. 과수원에 있지 않아.

+3

원하는 동작을 설명하십시오. "인터페이스를 객체 클래스로 사용"이 명확하지 않습니다. – CodeCaster

+0

@CodeCaster 두 번째 코드 블록은 내가 좋아하는 것과 같습니다 ... IContentManager를 사용하여 블로그 게시물 (톱 10을 선택하거나 ... 등)을 수행하는 과수원 모듈의 일부입니다. 나는 내 건축에서 똑같은 일을하고 싶다. 내 수업을 직접 사용하지 마십시오. 그냥 그들의 부모 인터페이스를 사용하거나 ... –

답변

1

클래스 또는 인터페이스가 IDependency에서 상속되어야합니다. 그런 다음 Orchard의 다른 서비스와 마찬가지로 주입 할 수 있습니다. 예를 들어

:

public interface MyInterface : IDependency 
{ 
    void DoSomething(); 
} 

public MyClass : MyInteface 
{ 
    public void DoSomething() 
    { 
     // work 
    } 
} 

public class ISRelatedContentsDriver : ContentPartDriver<ISRelatedContentsPart> 
{ 
    private readonly IContentManager _contentManager; 
    private readonly IMyInterface _myInterface; 

    public ISRelatedContentsDriver(IContentManager contentManager, IMyInterface myInterface) 
    { 
     _contentManager = contentManager; 
     _myInterface = myInterface; 
    } 
} 
+0

난 그게 어떻게 작동하는지 알고 싶다. 그리고 내 자신의 아키텍처에서 그것을 사용합니다. 과수원에 있지 않아. 과수원 맞춤 인터페이스의 IDependecy –

+0

사과드립니다. 질문에 대해 오해했습니다. 나는 당신의 질문이 autofac과 관련이 있다고 생각합니다. 그러나 그 메커니즘을 복사하려면 [과수원 IDependency가 실제로 어떻게 등록 되나요?] (https://github.com/OrchardCMS/Orchard/blob/dev/src/Orchard/Environment/ShellBuilders/ShellContainerFactory.cs)가 있습니다. 나는 소스와 F12를 통해 체크 아웃 하겠지만 순수한 Autofac 튜토리얼은 귀하의 경우에 더 적합해야합니다. – Xceno

0

당신이 찾고있는 용어는 의존성 삽입 (Dependency Injection)이며 예는 IOC의와 관련입니다. 인터페이스 및 구현을 등록하려면 IoC 컨테이너 (Autofac, Windsor, Unity 등)가 필요합니다. 그런 다음 위와 같은 서비스를 사용할 수 있습니다.

IoT 컨테이너 자습서 중 하나를 살펴 보거나 새로운 아키텍처를 만들지 여부를 다시 한 번 생각해 보시기 바랍니다.