gpt4 book ai didi

c# - 如何将 Unity 设置为依赖注入(inject)存储库到我的服务层?

转载 作者:行者123 更新时间:2023-11-30 22:32:44 24 4
gpt4 key购买 nike

我已经设置了一个 Bootstrap 如下:

    private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();
container.RegisterType<IService<Account>, AccountService>();
container.RegisterControllers();
return container;
}

我的 Controller 看起来像这样:

    public AccountsController(IService<Account> accountService) {
_account = accountService;
}

当被调用时,它会从 accountService 正确设置 _account,如下所示:

public class AccountService : BaseService, IService<Account>
{
public AccountService() { base.Initialize();
_accountRepository = StorageHelper.GetTable<Account>();
_productRepository = StorageHelper.GetTable<Product>();
}

您可以在这里看到,AccountService 依赖于设置两个存储库。在 Unity 中,我还可以通过某种方式指定这种依赖关系,这样我就不必在 StorageHelper.GetTable(); 中编写代码了;

更新:

我根据以下建议添加了以下代码:

 public AccountService(
IAzureTable<Account> accountRepository,
IAzureTable<Product> productRepository) {
//base.Initialize();
_accountRepository = accountRepository;
_productRepository = productRepository;
}

原始代码如下:

   public static IAzureTable<T> GetTable<T>() where T : TableServiceEntity
{
return new AzureTable<T>(GetStorageAccount(), TableNames[typeof(T)]);
}

然后尝试在 Bootstrap 中设置这些类型,如下所示:

 container.RegisterType<IAzureTable<Account>, AzureTable<Account>(GetStorageAccount(), "TestAccounts")>();
container.RegisterType<IAzureTable<Product>, AzureTable<Product>(GetStorageAccount(), "TestProducts")>();

我猜有些东西我不明白,因为这产生了很多语法错误。我在这里做错了吗?

最佳答案

是的,将这两个存储库视为构造函数参数,Unity 将按照您在 Bootstrap 中指定的方式将它们连接起来:

public class AccountService : BaseService, IService<Account> 
{
public AccountService(StorageHelperType accountRepo, StorageHelperType productRepo) { base.Initialize();
_accountRepository = accountRepo;
_productRepository = productRepo;
}

在您的 Bootstrap 中,您应该能够使用 InjectionConstructor(一个很好的例子 here)指定它将从何处获取这些参数(假设它们是不同的类型,如果它们是不同的类型,您可以将它们连接起来并Unity 会把它们整理出来)。

编辑新信息

当您使用 Unity 注册泛型类型时,将它们包装在 TypeOf 语句中,因为这似乎是您使用 Unity 绕过泛型的方式(来源:MSDN)

关于c# - 如何将 Unity 设置为依赖注入(inject)存储库到我的服务层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8614113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com