2 개의 인터페이스가 있으며 하나는 다른 인터페이스를 상속합니다. 기본 인터페이스의 경우 싱글 톤 구현이 있고 하위 인터페이스의 경우 기본 구현을 장식하는 데코레이터 싱글 톤 구현이 있습니다.유니티 컨테이너가있는 데코레이터 패턴 사용 (싱글 톤용)
이제 기본 인터페이스가 다른 클라이언트에 삽입 (또는 확인)되면 기본 구현은 데코레이터가 아닙니다 (서브 인터페이스에 의존하는 경우에만 데코레이터를받습니다)
원하는 것은 데코레이터 구현이 각 클라이언트에 주입되어야하지만 기본 구현은 여전히 구성되어야하고 데코레이터 싱글 톤에 주입되었습니다.
어떻게 설정하나요?
using System;
using Microsoft.Practices.Unity;
public interface IProvider
{
int GetValue();
}
public interface ITracker : IProvider
{
}
public class Provider : IProvider
{
public int GetValue()
{
Console.WriteLine("provider");
return 0;
}
}
추적기 :
이public class Tracker : ITracker
{
private readonly IProvider provider;
public Tracker(IProvider provider)
{
this.provider = provider;
}
public int GetValue()
{
Console.WriteLine("tracker");
return provider.GetValue();
}
}
프로그램 :
class Program
{
static void Main(string[] args)
{
var container = new UnityContainer();
container.RegisterType<IProvider, Provider>(
new ContainerControlledLifetimeManager());
container.RegisterType<ITracker, Tracker>(
new ContainerControlledLifetimeManager());
// want to get Tracker singleton instance here
var provider = container.Resolve<IProvider>();
// want to get Tracker singleton instance here
var tracker = container.Resolve<ITracker>();
}
}
ITracker의 모든 인스턴스가 동일한 IProvider 인스턴스를 갖기를 원하십니까? – robjam
하나의 공급자 인스턴스와 하나의 추적기 인스턴스 (둘 다 싱글 톤으로 등록) 만 있으면 추적기는 공급자를 종속성으로 가져옵니다. 그러나 클라이언트가 IProvider 또는 ITracker에 의존하는지에 관계없이 추적기 싱글 톤을 가져와야합니다. – user1803928
그래서 IProvider 만 트래커 구현에 주입하기를 원합니다. IProvider가 다른 클래스에 종속되면 ITracker를 가져야합니까? – Scrobi