我有一個依賴于的存盤庫User
我需要放置其他實作User并且我可以這樣做,但是使用這種方法我不知道如何模擬我的存盤庫
private readonly IRepository<Entity> _repository;
public SomeClass(MyAppDbContext context)
{
_repository= new EfRepository<WorkOrder>(context, new User());
}
有沒有辦法在User這里注入一個特定的實作,或者我如何測驗我寫的代碼
uj5u.com熱心網友回復:
就像你注入MyAppDbContext你SomeClass也可以注入一個實體User,例如
private readonly IRepository<Entity> _repository;
public SomeClass(MyAppDbContext context, User user)
{
_repository= new EfRepository<WorkOrder>(context, user);
}
您可以User像這樣在 IoC 中注冊:
services.AddTransient<User>();
如果您已經為另一個實體注冊了服務User并想要使用另一個實體,您可以SomeClass為該User實體注冊一個工廠方法:
services.AddScoped<SomeClass>(prov => new SomeClass(
prov.GetRequiredService<MyAppDbContext>(),
new User()));
如果您只有幾個需要特殊實體的地方,工廠方法方法是可行的,否則您可以使用這種方法:與其他 IoCC 不同,.NET Core IoCC 不支持命名注冊,但您也可以使用某種“標記介面”來注冊另一個實體:
public interface ISpecialUser : IUser {}
public class User : IUser
{
// ...
}
public class AnotherUser : ISpecialUser
{
// ...
}
// ...
public SomeClass(MyAppDbContext context, ISpecialUser user)
{
_repository= new EfRepository<WorkOrder>(context, user);
}
// ...
services.AddScoped<IUser, User>();
services.AddScoped<ISpecialUser, AnotherUser>();
在測驗中,您可以設定一個User適合您需要的實體并使用新的建構式引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480466.html
下一篇:EF核心更新條目然后插入
