Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor di #372

Merged
merged 2 commits into from
Dec 13, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -48,11 +48,13 @@ public virtual List<Type> GetImplementationTypes(List<Type> types, Type serviceT
public virtual List<Type> GetServiceTypes(List<Type> types, Type interfaceType)
{
var interfaceServiceTypes = types.Where(t => t.IsInterface && t != interfaceType && interfaceType.IsAssignableFrom(t));
return types.Where(type
=> IsAssignableFrom(interfaceType, type) && !type.GetInterfaces().Any(t => interfaceServiceTypes.Contains(t)) &&
!IsSkip(type))
.Concat(interfaceServiceTypes)
.ToList();
var classServiceTypes = types.Where(type
=> IsAssignableFrom(interfaceType, type) &&
!interfaceServiceTypes.Any(t => IsAssignableFrom(t, type)) &&
!IsSkip(type));

var list = new List<Type>(interfaceServiceTypes).Concat(classServiceTypes);
return list.ToList();
}

public virtual bool IsSkip(Type type)
Original file line number Diff line number Diff line change
@@ -6,16 +6,3 @@ namespace Microsoft.Extensions.DependencyInjection;
public interface IScopedDependency
{
}


public interface ITestService<T> : IScopedDependency
where T : class
{

}

public class TestSerice<T> : ITestService<T>
where T : class
{

}
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.

using Masa.Utils.Extensions.DependencyInjection.Tests.Domain.Models;

namespace Masa.Utils.Extensions.DependencyInjection.Tests;

[TestClass]
@@ -32,12 +30,19 @@ public void TestSkip()
}

[TestMethod]
public void TestGetServiceTypesReturnCountIs5()
public void TestGetServiceTypesBySingletonReturnCountIs5()
{
var serviceTypes = _typeProvider.GetServiceTypes(_allTypes.ToList(), typeof(ISingletonDependency));
Assert.IsTrue(serviceTypes.Count == 5);
}

[TestMethod]
public void TestGetServiceTypesByScopedReturnCountIs3()
{
var serviceTypes = _typeProvider.GetServiceTypes(_allTypes.ToList(), typeof(IScopedDependency));
Assert.IsTrue(serviceTypes.Count == 3);
}

[TestMethod]
public void TestGetImplementationTypesReturnCountIs1()
{
@@ -71,10 +76,13 @@ public void TestAssignableFrom()
Assert.IsFalse(_typeProvider.IsAssignableFrom(typeof(RepositoryBase<>), typeof(IRepository<>)));
Assert.IsFalse(_typeProvider.IsAssignableFrom(typeof(RepositoryBase<User>), typeof(IRepository<User>)));

Assert.IsTrue(_typeProvider.IsAssignableFrom(typeof(IRepository<,>), typeof(UserRepository<>)));
Assert.IsFalse(_typeProvider.IsAssignableFrom(typeof(IRepository<UserDbContext, User>), typeof(UserRepository<>)));
Assert.IsFalse(_typeProvider.IsAssignableFrom(typeof(UserRepository<>), typeof(IRepository<,>)));
Assert.IsTrue(_typeProvider.IsAssignableFrom(typeof(IRepository<UserDbContext, User>), typeof(UserRepository<User>)));
Assert.IsTrue(_typeProvider.IsAssignableFrom(typeof(IRepository<,>), typeof(RepositoryBase<,>)));
Assert.IsTrue(_typeProvider.IsAssignableFrom(typeof(IRepository<,>), typeof(TestRepository<>)));
Assert.IsFalse(_typeProvider.IsAssignableFrom(typeof(IRepository<UserDbContext, User>), typeof(RepositoryBase<>)));
Assert.IsFalse(_typeProvider.IsAssignableFrom(typeof(IRepository<UserDbContext, User>), typeof(UserRepository)));
Assert.IsFalse(_typeProvider.IsAssignableFrom(typeof(RepositoryBase<,>), typeof(IRepository<,>)));
Assert.IsTrue(_typeProvider.IsAssignableFrom(typeof(IRepository<UserDbContext, User>),
typeof(RepositoryBase<UserDbContext, User>)));
}

[TestMethod]
@@ -100,10 +108,10 @@ public void TestAssignableTo()
Assert.IsTrue(_typeProvider.IsAssignableTo(typeof(RepositoryBase<>), typeof(IRepository<>)));
Assert.IsTrue(_typeProvider.IsAssignableTo(typeof(RepositoryBase<User>), typeof(IRepository<User>)));

Assert.IsFalse(_typeProvider.IsAssignableTo(typeof(IRepository<,>), typeof(UserRepository<>)));
Assert.IsFalse(_typeProvider.IsAssignableTo(typeof(IRepository<UserDbContext, User>), typeof(UserRepository<>)));
Assert.IsTrue(_typeProvider.IsAssignableTo(typeof(UserRepository<>), typeof(IRepository<,>)));
Assert.IsFalse(_typeProvider.IsAssignableTo(typeof(IRepository<UserDbContext, User>), typeof(UserRepository<User>)));
Assert.IsFalse(_typeProvider.IsAssignableTo(typeof(IRepository<,>), typeof(RepositoryBase<,>)));
Assert.IsFalse(_typeProvider.IsAssignableTo(typeof(IRepository<UserDbContext, User>), typeof(RepositoryBase<,>)));
Assert.IsTrue(_typeProvider.IsAssignableTo(typeof(RepositoryBase<,>), typeof(IRepository<,>)));
Assert.IsFalse(_typeProvider.IsAssignableTo(typeof(IRepository<UserDbContext, User>), typeof(RepositoryBase<,>)));
}

[TestMethod]
@@ -161,6 +169,12 @@ public void TestAddAutoInjectMultiReturnCountIs1()
var serviceProvider = services.BuildServiceProvider();
Assert.IsNotNull(serviceProvider.GetService<IRepository<User>>());
Assert.IsTrue(serviceProvider.GetServices<IRepository<User>>().Count() == 1);

Assert.IsNull(serviceProvider.GetService<Repository<User>>());
Assert.IsNull(serviceProvider.GetService<RepositoryBase<UserDbContext, User>>());
Assert.IsNull(serviceProvider.GetService<UserRepository>());
Assert.IsNotNull(serviceProvider.GetService<IUserRepository>());
Assert.IsNull(serviceProvider.GetService<UserRepository>());
}

[TestMethod]
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.

namespace Masa.Utils.Extensions.DependencyInjection.Tests.Domain.Repositories;

public interface IUserRepository : IRepository<User>
{

}
Original file line number Diff line number Diff line change
@@ -15,7 +15,14 @@ public class Repository<TEntity> : RepositoryBase<TEntity>

}

public class UserRepository<TEntity> : IRepository<UserDbContext, TEntity>
public class RepositoryBase<TDbContext, TEntity> : IRepository<TDbContext, TEntity>
where TEntity : class
where TDbContext : class
{

}

public class TestRepository<TEntity> : IRepository<UserDbContext, TEntity>
where TEntity : class
{

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.

namespace Masa.Utils.Extensions.DependencyInjection.Tests.Infrastructure.Repositories;

public class UserRepository : IUserRepository
{

}
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.

using Masa.Utils.Extensions.DependencyInjection.Tests.Domain.Services;

namespace Masa.Utils.Extensions.DependencyInjection.Tests.Infrastructure.Services;

[Dependency(ReplaceServices = true)]
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.

using Masa.Utils.Extensions.DependencyInjection.Tests.Domain.Services;

namespace Masa.Utils.Extensions.DependencyInjection.Tests.Infrastructure.Services;

public class EmptyClientFactory : IClientFactory
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.

using Masa.Utils.Extensions.DependencyInjection.Tests.Domain.Services;

namespace Masa.Utils.Extensions.DependencyInjection.Tests.Infrastructure.Services;

public class NullCalculateProviderService : ICalculateProviderService
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.

global using Masa.Utils.Extensions.DependencyInjection.Tests.Domain.Models;
global using Masa.Utils.Extensions.DependencyInjection.Tests.Domain.Repositories;
global using Masa.Utils.Extensions.DependencyInjection.Tests.Domain.Services;
global using Masa.Utils.Extensions.DependencyInjection.Tests.Infrastructure;