2017-05-28 8 views
-1

次のIRoleClientとRoleClientを持っていますが、それは異なるroutePrefixで異なります。コンストラクタ(C#)で異なるパラメータを使用した依存性注入

依存性注入 "unity"を使用して、別のroutePrefixを使用してAdminRoleControllerとUserRoleControllerにIRoleClientを注入する方法。それとも他のアプローチがそれを達成できるか?

public interface IRoleClient 
{ 
    Task<PagedResponse<RoleModel>> GetRolesAsync(GetRolesRequest request); 

    Task<CreateRoleResponse> CreateRoleAsync(CreateRoleRequest request); 

    Task<UpdateRoleResponse> UpdateRoleAsync(int roleId, UpdateRoleRequest request); 
} 

public sealed class RoleClient : IRoleClient 
{ 
    private readonly string _routePrefix; 
    public RoleClient(string serverBaseUrl, string routePrefix) : base(serverBaseUrl) 
    { 
     _routePrefix = routePrefix; 
    } 
    Task<PagedResponse<RoleModel>> IBackOfficeRoleClient.GetRolesAsync([FromUri] GetRolesRequest request) 
    { 
     return GetAsync<PagedResponse<RoleModel>>(_routePrefix, request); 
    } 

    async Task<CreateRoleResponse> IBackOfficeRoleClient.CreateRoleAsync(CreateRoleRequest request) 
    { 
     var res = await PostJsonAsync(_routePrefix, request); 
     return await ReadJsonContentAsync<CreateRoleResponse>(res.Content); 
    } 

    Task<UpdateRoleResponse> IBackOfficeRoleClient.UpdateRoleAsync(int roleId, UpdateRoleRequest request) 
    { 
     return PutAsync<UpdateRoleResponse>($"{_routePrefix}/{roleId}", request); 
    } 
} 

public class AdminRoleController() 
{ 
    private readonly IRoleClient _roleClient; 
    public AdminRoleController(IRoleClient roleClient) 
    { 
     _roleClient = roleClient; 
    } 
} 

public class UserRoleController() 
{ 
    private readonly IRoleClient _roleClient; 
    public UserRoleController(IRoleClient roleClient) 
    { 
     _roleClient = roleClient; 
    } 
} 

そしてここであなたには、いくつかの名前で登録されたコンストラクタにオブジェクトを挿入することができます団結

container.RegisterType<IRoleClient, RoleClient>(ReuseWithinResolve, new InjectionConstructor(Config.ApiUrl,"/api/adminRoles")); 
container.RegisterType<IRoleClient, RoleClient>(ReuseWithinResolve, new InjectionConstructor(Config.ApiUrl,"/api/userRoles")); 

container.RegisterType<Func<string, IRoleClient>>(
      new InjectionFactory(c => 
       new Func<string, IRoleClient>(name => c.Resolve<IRoleClient>(name)))); 

答えて

1

で私のレジスタです。

container.RegisterType<IRoleClient, RoleClient>("SomeRegisterName", ReuseWithinResolve, new InjectionConstructor(Config.ApiUrl, "/api/adminRoles")); 

.... 

public class AdminRoleController() 
{ 
    private readonly IRoleClient _roleClient; 
    public AdminRoleController([Dependency("SomeRegisterName")]IRoleClient roleClient) 
    { 
     _roleClient = roleClient; 
    } 
} 
関連する問題