구조 맵에서 Autofac으로 전환 중입니다. 나는 모두 캐시와 생성자의 매개 변수 이름에 따라 적절한 오브젝트의 저장소 및 스위치에 대한 인터페이스를 구현 스콧 밀레의 책 ASP.net 디자인 패턴에서 캐싱 패턴을 사용했습니다 인터페이스이Structure Map에서 AutoFac으로 캐싱 패턴 변환
과 같은public interface ISchemeRepository
{
List<Scheme> GetSchemes();
}
은 캐시 객체는이
public class SchemeRepository : BaseRepository, ISchemeRepository
{
/***************************************************************
* Properties
***************************************************************/
개인 읽기 전용 ISchemeRepository schemeRepository과 같다;
/***************************************************************
* Constructors
***************************************************************/
public SchemeRepository()
: this(ObjectFactory.GetInstance<ISchemeRepository>(), ObjectFactory.GetInstance<IConfigurationSetting>())
{
}
public SchemeRepository(ISchemeRepository realSchemeRepository, IConfigurationSetting configurationSetting)
{
schemeRepository = realSchemeRepository;
this.configurationSetting = configurationSetting;
}
/**************************************************************
* Methods
***************************************************************/
public List<Scheme> GetSchemes()
{
string key = Prefix + "Schemes";
if (!MemoryCache.Default.Contains(key))
{
MemoryCache.Default.Add(key, schemeRepository.GetSchemes(), new CacheItemPolicy());
}
return (List<Scheme>)MemoryCache.Default.Get(key);
}
}는
저장소이
public class SchemeRepository : BaseLocalRepository, ISchemeRepository
{
/***************************************************************
* Properties
***************************************************************/
private readonly IConnectionSetting connectionSetting;
/***************************************************************
* Constructors
***************************************************************/
public SchemeRepository()
: this(ObjectFactory.GetInstance<IConnectionSetting>())
{
}
public SchemeRepository(IConnectionSetting connectionSetting)
{
this.connectionSetting = connectionSetting;
}
/**************************************************************
* Methods
***************************************************************/
public List<Scheme> GetSchemes()
{
var response = new List<Scheme>();
var conn = new SqlConnection(connectionSetting.CQBConnectionString);
var command = new SqlCommand("proc_GetSchemes", conn) { CommandType = CommandType.StoredProcedure };
conn.Open();
var reader = command.ExecuteReader();
while (reader.Read())
{
response.Add(
new Scheme
{
SchemeId = reader["Scheme_Id"].ToString().Trim(),
GuaranteeText = reader["Guarantee_Text"].ToString().Trim()
}
);
}
conn.Close();
return response;
}
}
구조지도 호출
InstanceOf<Repository.Local.Contract.IProviderRepository>().Is.OfConcreteType<Repository.Local.Core.ProviderRepository>().WithName("RealProviderRepository");
ForRequestedType<Repository.Local.Contract.IProviderRepository>().TheDefault.Is.OfConcreteType<Repository.Local.Cache.ProviderRepository>().CtorDependency<Repository.Local.Contract.IProviderRepository>().Is(x => x.TheInstanceNamed("RealProviderRepository"));
구조 맵 생성자 보인다 이하 같다하고 매개 변수를 포함하는 경우라고 "realSchemeRepository"그러면 데이터베이스에 연결하는 객체를 구현합니다 (그렇지 않은 경우). 캐시를 검사하고 캐시에 아무것도없는 경우 데이터베이스를 호출하는 캐시 객체를 구현하고 캐시를 채 웁니다.
Autofac에서는 어떻게합니까? Autofac에서 더 나은 방법이 있습니까?