2016-03-01 2 views
0

Например, у меня есть IRepository, Реализовано Repository с некоторыми перехватчиками.Каков правильный способ вызова прокси-метода внутри конкретного класса?

Внутри перехватчика я вижу, что IRepositoryProxy базовый тип Object и не Repository.

Например: постановляю IRepository и вызвать GetFunctionalityPurposes, то, что я хочу, это призыв к GetAllFunctionalityPurposes быть также кэшируются/проксированном.

Это не работает, поскольку методы вызываются в Repository, но не IRepositoryProxy.

IRepository

FunctionalityPurpose[] GetFunctionalityPurposes(); 
FunctionalityPurpose[] GetAllFunctionalityPurposes() 

Repository

[Cached("Tender")] 
public virtual FunctionalityPurpose[] GetFunctionalityPurposes() 
{ 
    var model = GetAllFunctionalityPurposes() 
     .Where(r => !r.IsHidden && !r.GroupId.HasValue); 

    return model; 
} 

[Cached("Tender", "FunctionalityPurpose")] 
public virtual FunctionalityPurpose[] GetAllFunctionalityPurposes() 
{ 
    var model = UnitOfWork.GetSet<Model>().Select(f => f.FunctionalityPurpose) 
     .Distinct().OrderBy(r => r.Id).ToArray(); 

    return model; 
} 
+0

Это было бы лучше, чтобы вы показали код, который объясняет проблему. –

+0

@ L-Three Добавлен код для иллюстрации проблемы – xumix

+0

@PhilDegenhardt да, похоже на то же самое – xumix

ответ

0

Я посмотрел в https://github.com/castleproject/Windsor/blob/master/src/Castle.Windsor/Windsor/Proxy/DefaultProxyFactory.cs#L110, и я сделал Регистрационной легкий путь: container.Register(Classes.FromThisAssembly().BasedOn(typeof(IRepositoryBase<,>)) .WithServiceAllInterfaces().WithServiceSelf().LifestyleTransient());

Примечание .WithServiceSelf() вызов, это фактически переключает проксирование на основе классов

 Смежные вопросы

  • Нет связанных вопросов^_^