Укажите политику для допустимого типа - PullRequest
1 голос
/ 20 июля 2011

Предположим, у меня есть следующий код:

class Program
{
static void Main(string[] args)
{
    IUnityContainer container = new UnityContainer();

    container.AddNewExtension<Interception>();

    container.RegisterType<Interceptable>(
        new Interceptor<VirtualMethodInterceptor>(),
        new InterceptionBehavior<PolicyInjectionBehavior>());

    container
        .Configure<Interception>()
            .AddPolicy("PolicyName")
                .AddMatchingRule(new CustomAttributeMatchingRule(typeof(SomeAttribute), true))
                .AddMatchingRule(new PropertyMatchingRule("*", PropertyMatchingOption.Set))
                .AddCallHandler<PropertySetterCallHandler>();
        .Interception
            .AddPolicy("AnotherPolicyName")
                .AddMatchingRule(new CustomAttributeMatchingRule(typeof(SomeOTHERAttribute), true))
                .AddMatchingRule(new PropertyMatchingRule("*M", PropertyMatchingOption.Set))
                .AddCallHandler<ANOTHERPropertySetterCallHandler>();


        var ic = container.Resolve<Interceptable>();

        //property setter is invoked - the matching rules from BOTH the policies will be tried
        ic.Property = 2;

        Console.ReadLine();
}

class Interceptable
{
    public virtual int Property  {  get; [SomeAttribute]set; }
}

}

То, как он настроен сейчас, каждый раз, когда я разрешаю экземпляр Interceptable и вызываю на нем публичный виртуальный метод, пробуются 4 соответствующих правила (из обоихполитики).

Это может привести к накладным расходам в реальном приложении.Я хотел бы указать, что я хочу, чтобы только (например) политика «PolicyName» применялась к экземплярам класса Interceptable.Есть ли способ сделать это?

Спасибо

...