gpt4 book ai didi

c# - 在 Unity 注册时注入(inject)一个未知值

转载 作者:行者123 更新时间:2023-11-30 18:21:30 25 4
gpt4 key购买 nike

这里是Unity注册

public static class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer();
container.RegisterType<ITestService,TestService>(new InjectionConstructor("XXXXX"));
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
}

这里是 webApi Controller

[MyFilter]
public class TestController : ApiController
{
private ITestService _testService;
public EmployeeController(ITestService testService)
{
_testService = testService;
}
}

我的测试课

public interface ITestService
{
string GetText();
}
public class TestService : ITestService
{
private string _mystring;
public TestService(string mystring)
{
_mystring = mystring;
}
public string GetText()
{
return _mystring;
}
}

问题:在构造函数中注入(inject)的值(此处硬编码为“XXXXX”)仅在 [MyFilter] 中知道,而不是在之前,在注册时不知道。是否可以注入(inject)来自属性的值?

谢谢,

更新一:我使用的解决方法是在工作 session 中保存值“XXXXX”,但不是很干净。

public class MyFilter: AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
try
{

HttpContext.Current.Session["MyData"] = "XXXXX";
return;

HandleUnauthorized(actionContext);
}
catch (Exception ex)
{
}
}

private void HandleUnauthorized(HttpActionContext actionContext)
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
}
}

最佳答案

在 resolve 方法中注入(inject)值:

container.RegisterType<ITestService,TestService>();
...
var service = container.Resolve<ITestService>(new ParameterOverride(@"mystring", new InjectionParameter(typeof(string), "XXXXX")));

关于c# - 在 Unity 注册时注入(inject)一个未知值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35332205/

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