HiveBrain v1.2.0
Get Started
← Back to all entries
patterncsharpMinor

Defaulting dependencies

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
dependenciesdefaultingstackoverflow

Problem

What are some advantages and disadvantages of providing default implementations for dependencies. I have chosen to do this because it allows the objects to be easily used in the application but also allows me to mock for unit testing.

public class RoleProvider : RoleProviderBase
{
    private IRoleDataProvider _roleDataProvider;

    private IEntitlementsDataProvider EntitlementsDataProvider
    {
        get
        {
            if (_roleDataProvider == null)
            {
                _roleDataProvider = new RoleDataProvider();
            }
            return _roleDataProvider;
        }
    }

    public RoleProvider(IRoleDataProvider roleDataProvider)
    {
        _roleDataProvider = roleDataProvider;
    }

    public RoleProvider()
    {
    }
}

Solution

I personally don't see any problem with this (maybe someone else might provide better insight) but in this situation I do tend to do it differently but instantiating it via constructor overloading and making the private field readonly.

e.g.

public class RoleProvider : RoleProviderBase
{
    private readonly IRoleDataProvider _roleDataProvider;

    public RoleProvider()
       : this(new RoleDataProvider())
    {
    }

    public RoleProvider(IRoleDataProvider roleDataProvider)
    {
        _roleDataProvider = roleDataProvider;
    }
}


Perhaps this question might be better asked on PE as well?

Code Snippets

public class RoleProvider : RoleProviderBase
{
    private readonly IRoleDataProvider _roleDataProvider;

    public RoleProvider()
       : this(new RoleDataProvider())
    {
    }

    public RoleProvider(IRoleDataProvider roleDataProvider)
    {
        _roleDataProvider = roleDataProvider;
    }
}

Context

StackExchange Code Review Q#13099, answer score: 5

Revisions (0)

No revisions yet.