gpt4 book ai didi

c# - Unity(依赖注入(inject)): How to pass in a parameter to the constructor in RegisterType

转载 作者:太空狗 更新时间:2023-10-29 21:42:22 24 4
gpt4 key购买 nike

有人能帮忙吗?

我有一个 wpf 应用程序(应该无关紧要),在 Onstart 中我有我的 bootstrap 东西..就像这样..

        // Create unity container my service and repository
container = new UnityContainer()
.RegisterType<ISecurityRepository, SecurityRepository>()
.RegisterType<ISecurityService, SecurityService>();

基本上 ISecurityService 希望我传递一个 ISecurityRepository,因此上面的操作失败了。

但我有点困惑,我是否必须创建一个新的 IsecurityRespository 然后将其传入,这会破坏对象,不是吗?

有没有我说“从容器中将 ISecurityRepository 传递给 SecurityService”,但它还没有构建?

有什么想法吗?

最佳答案

您不必先创建实例。一切正常。这就是 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 createdSecurityService createdRepository is A SecurityRepositoryMy class has security: A SecurityService

您有多种选择,例如预先创建您的实例(如您在后续帖子中所示)或延长注入(inject)的依赖项的生命周期,这样它们就不会在每次需要时都重新创建。但对于基本情况,这将起作用。

关于c# - Unity(依赖注入(inject)): How to pass in a parameter to the constructor in RegisterType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1483634/

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