Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IOC vs New guidelines

Recently I was looking at some source code provided by community leaders in their open source implementations. One these projects made use of IOC. Here is sample hypothetical code:

public class Class1
{
    private ISomeInterface _someObject;

    public Class1(ISomeInterface someObject)
    {
        _someObject = someObject;
    }

    // some more code and then

    var someOtherObject = new SomeOtherObject();
}

My question is not about what the IOCs are for and how to use them in technical terms but rather what are the guidelines regarding object creation. All that effort and then this line using "new" operator. I don't quite understand. Which object should be created by IOC and for which ones it is permissible to be created via the new operator?

like image 621
user981375 Avatar asked Jan 27 '26 18:01

user981375


1 Answers

As a general rule of thumb, if something is providing a service which may want to be replaced either for testing or to use a different implementation (e.g. different authentication services) then inject the dependency. If it's something like a collection, or a simple data object which isn't providing behaviour which you'd ever want to vary, then it's fine to instantiate it within the class.

like image 186
Jon Skeet Avatar answered Jan 31 '26 03:01

Jon Skeet



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!