c# - 使用 Unity 设置依赖注入(inject)以将类的实例传递给构造函数

标签 c# asp.net dependency-injection

我确信这里有我的问题的答案,虽然我不太明白我在寻找什么或我正在阅读什么......另外,不是 100% 确定 DI 是我应该做的在这种情况下使用。

我正在尝试将 Unity 用于我的 DI。我正在向 ASP.Net Web API Controller 中注入(inject)依赖项。到目前为止一切顺利。

我正在将 Controller 需要的服务注入(inject)我的 Controller 。例如,在我的一个 Controller 中我有:

private TransactionService _transactionService;

public TransactionsController(TransactionService transactionService)
{
    _transactionService = transactionService;
}

在这种情况下,我将 TransactionService 的一个实例注入(inject)到 Controller 中。这一切正常。

我的 WebApiConfig.cs 包含以下内容,据我所知,它实际上执行了注入(inject):

   var container = new UnityContainer();
   container.RegisterType<ServiceBase>(new HierarchicalLifetimeManager());
   config.DependencyResolver = new UnityResolver(container);

如果需要,我可以向您展示我的 UnityResolver

现在我正在努力的部分......

我的服务都继承自抽象类 ServiceBase - 最简单的形式如下所示:

public abstract class ServiceBase : IDisposable
{

    internal Account _account;

    public ServiceBase(){}
} 

我想做的是在我的注入(inject)过程中创建Account 并以某种方式传递它,这样我注入(inject)的服务就不需要处理实例化帐户。

当我尝试向我的服务添加任何构造函数以接受帐户时,我收到消息以确保我的 Controller 具有无参数构造函数。

那么..我该如何设置我的 DI 以便我可以将服务注入(inject)我的 Controller 并将预先实例化的 Account 实例注入(inject)我的服务?

更新

我忘了提及(对不起 Wiktor)——如果可能的话,我不想使用属性。我觉得很奇怪,我们可以使用 DI 来解开依赖,然后到处放一堆依赖属性。我很可能只是没有正确理解 DI 概念,尽管这对我来说似乎不正确

最佳答案

这应该很简单,只需将附加属性公开并在其上添加依赖属性即可。

 [Dependency]  
 public Account _account { get; set; }

Unity 应该能够注入(inject)属性,您甚至可以以普通方式(例如使用注入(inject)工厂)注册 Account 类。

关于c# - 使用 Unity 设置依赖注入(inject)以将类的实例传递给构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24577549/

相关文章:

c# - 代码隐藏中的 ASP.NET 定义列表 <dl>

c# - Azure 和本地 TCP 连接数有很大不同

c# - 对于 'char' 变量,“int”从不等于 null

c# - AjaxFileUpload获取文件流

dependency-injection - ASP.NET MVC 3 RC 中的 MvcServiceLocator 在哪里?

logging - 如何让注入(inject)的记录器在 grails 中工作?

javascript - C#和javascript之间的加密结果差异

c# - 缓存过期,尽管明确设置为不过期

c# - 以编程方式从后面的代码关闭 aspx 页面

c# - 是否可以在创建 Autofac LifetimeScope 后向其添加注册?