我确信这里有我的问题的答案,虽然我不太明白我在寻找什么或我正在阅读什么......另外,不是 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/