![](/img/trans.png)
[英]How to pass a type as parameter to a constructor when using Unity dependency injection
[英]Unity (dependency injection): How to pass in a parameter to the constructor in RegisterType
有人可以帮忙吗?
我有一个wpf应用程序(应该没关系),在Onstart我有我的bootstrap东西..就像这样..
// Create unity container my service and repository
container = new UnityContainer()
.RegisterType<ISecurityRepository, SecurityRepository>()
.RegisterType<ISecurityService, SecurityService>();
基本上ISecurityService希望我传入一个ISecurityRepository,因此上面的失败。
但我有点困惑,我是否必须创建一个新的IsecurityRespository然后传入它,这会失败对象不是吗?
无论如何我说“从容器传入SecurityService ISecurityRepository”,但它还没有建成?
有任何想法吗?
您不必先创建实例。 一切正常。 这就是IoC容器的神奇之处。
例:
public interface ISecurityService { }
public interface ISecurityRepository { }
public class SecurityService : ISecurityService
{
public SecurityService(ISecurityRepository repository)
{
Console.WriteLine("SecurityService created");
Console.WriteLine("Repository is " + repository);
}
public override string ToString()
{
return "A SecurityService";
}
}
public class SecurityRepository : ISecurityRepository
{
public SecurityRepository()
{
Console.WriteLine("SecurityRepository created");
}
public override string ToString()
{
return "A SecurityRepository";
}
}
public class MyClassThatNeedsSecurity
{
public MyClassThatNeedsSecurity(ISecurityService security)
{
Console.WriteLine("My class has security: " + security);
}
}
class Program
{
static void Main()
{
using (IUnityContainer container = new UnityContainer())
{
container.RegisterType<ISecurityRepository, SecurityRepository>()
.RegisterType<ISecurityService, SecurityService>();
MyClassThatNeedsSecurity myClass =
container.Resolve<MyClassThatNeedsSecurity>();
}
}
}
这将打印:
SecurityRepository created SecurityService created Repository is A SecurityRepository My class has security: A SecurityService
您有许多选项,例如预先创建实例(如您在后续帖子中所示)或延长注入的依赖项的生命周期,以便每次需要时都不会重新创建它们。 但对于基本情况,这将有效。
这里有更多信息。 我班的构造函数是
public SecurityService(ISecurityRepository repository)
: base(repository)
{
}
玩了一下之后,我设法做了以下但这导致我创建实例FIRST ......它似乎工作..,但它的另一种选择。
// Create unity container my service and repository
ISecurityRepository securityRepository = new SecurityRepository();
ISecurityService securityService = new SecurityService(securityRepository);
container = new UnityContainer();
container.RegisterInstance<ISecurityRepository>(securityRepository);
container.RegisterInstance<ISecurityService>(securityService);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.