gpt4 book ai didi

dependency-injection - 自动法。如何获取调用者类类型?

转载 作者:行者123 更新时间:2023-12-04 08:21:31 25 4
gpt4 key购买 nike

假设我们有两个具有相同构造函数 Injectable 依赖的类:

public class FirstClass
{
public FirstClass(ISomeDependency someDependency)
{ }
}

public class SecondClass
{
public SecondClass(ISomeDependency someDependency)
{ }
}

现在我们注册了 ISomeDependency :
builder.Register(x =>
{
string key = GetKeyFromCurrentHttpRequest();
// if "Caller" is "FirstClass" return new Dependency(key);
// else return new Dependency("defaultKey");
}).As<ISomeDependency>();

注意:这是一个简化的用例。实际情况要复杂得多。

1. 如何获得试图解决 ISomeDependency 的“Caller”类型?

2. 针对这种情况有没有更好的方式设计?

最佳答案

您可以使用委托(delegate)工厂来实现您的目标。唯一的缺点是 FirstClassSecondClass无法使用 ISomeDependency作为参数。

您可以在控制台应用程序中尝试此代码(只需添加 Autofac 依赖项)。

using System;
using Autofac;

namespace test
{
class MainClass
{
public static void Main(string[] args)
{
ContainerBuilder builder = new ContainerBuilder ();
builder.RegisterType<SomeDependency>().As<ISomeDependency>();
builder.RegisterType<FirstClass>();
builder.RegisterType<SecondClass>();
var container = builder.Build();

var dummy = container.Resolve<FirstClass>();
var dummy2 = container.Resolve<SecondClass>();
}

public interface ISomeDependency
{
}

public class SomeDependency : ISomeDependency
{
public delegate ISomeDependency Factory(string value);
private readonly string _value;

public SomeDependency(string value)
{
_value = value;
Console.WriteLine("Value = " + _value);
}
}

public class FirstClass
{
private ISomeDependency _dependency;

public FirstClass(SomeDependency.Factory factory)
{
_dependency = factory.Invoke("my value");
}
}

public class SecondClass
{
private ISomeDependency _dependency;

public SecondClass(SomeDependency.Factory factory)
{
_dependency = factory.Invoke("my value 2");
}
}
}
}

关于dependency-injection - 自动法。如何获取调用者类类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28220656/

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