Coder Social home page Coder Social logo

Comments (6)

deresh-andrew avatar deresh-andrew commented on August 17, 2024

P.S. This is very nice project, I'm really fond of it. Free PostSharp alternative) I don't get why there are so many neutral or negative comments on http://habrahabr.ru/post/246469/

from aspect-injector.

YuriyIvon avatar YuriyIvon commented on August 17, 2024

Thank you for the feedback!

As for the "instance" source - it should work everywhere. In our tests we have the following:

    internal class AdviceInjectionBeforeTests_BeforeConstructorAspect
    {
        [Advice(InjectionPoints.Before, InjectionTargets.Constructor)]
        public void BeforeConstructor([AdviceArgument(AdviceArgumentSource.Instance)] object instance)
        {
            if (instance != null)
                Checker.Passed = true;
        }
    }

If you have any issues with passing the instance to a constructor - please give as a code sample, we will check.

from aspect-injector.

pamidur avatar pamidur commented on August 17, 2024

Yuriy, I guess that Andrew meant that if we have a advice per instance there is no point to pass that instance every time injected method called. He suggests to have a ability to get the instance in advice's constructor. Which could be done by changing AspectFactoryAttribute or allowing ArgumentSource in advice's constructor.

from aspect-injector.

deresh-andrew avatar deresh-andrew commented on August 17, 2024

Thanks for yours replies. @pamidur - that is exactly my point. If Aspect is applied to the property (in case of INPC), not class, [Advice(InjectionPoints.Before, InjectionTargets.Constructor)] is not called. As an alternative I can suggest call [Advice(InjectionPoints.Before, InjectionTargets.Constructor)] when non-class aspect (e.g. InjectionTargets.Setter) is applied.
Sample class when [Advice(InjectionPoints.Before, InjectionTargets.Constructor)] is not called.

    public class MyClass : INotifyPropertyChanged
    {
        [Aspect(typeof(NotifyPropertyChangedAspect))]
        public string Name { get; set; }

        public event PropertyChangedEventHandler PropertyChanged;

        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged(string propertyName)
        {
            var handler = PropertyChanged;
            if (handler != null)
                handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

from aspect-injector.

pamidur avatar pamidur commented on August 17, 2024

We could support ArgumentSource.Instance and ArgumentSource.TargetArguments in advice's constructor. Will it work with DI ?

We also could always inject InjectionTargets.Constructor? Will it make all architecture inconsistent?

Option c) - Implement InjectionTargets.Init which will always be injected into for such scenario

from aspect-injector.

pamidur avatar pamidur commented on August 17, 2024

I think we can support

public enum AspectArgumentSource
{
        Instance,
        Type,
}

from aspect-injector.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.