编程语言
首页 > 编程语言> > c#-Autofac-在解析时在.OnActivated方法内传递值

c#-Autofac-在解析时在.OnActivated方法内传递值

作者:互联网

我解析实例时需要在.OnActivated方法内部传递值

builder.RegisterType<MyType>().PropertiesAutowired().
    .OnActivated(x => {                    
        var myValue  =    //i need to get a value passed when i call Resolve
        //do stuffs
        }
    );

var myObject = scope.Resolve<MyType>();   //<--to pass a value here

这个怎么做?我知道有工厂吗?是否存在一种简单的方法

解决方法:

您有两种主要情况:

1 /您的值是整个应用程序的静态范围

您可以像这样简单地注册

int dummy = 20;

builder.RegisterType<MyType>().PropertiesAutowired()
.OnActivated(x => 
{
    var myValue = dummy;
} 

这是完全有效的

2 / You参数仅在解析时已知

您可以将参数添加为构造函数参数:

public class MyType
{
    private int intValue;

    public MyType(int myCustomValue)
    {
        this.intValue = myCustomValue;
    }
}

然后,您可以构建一个小的Abstract Factory或使用内置的int Func

int dummy = 20;
var myObjectFactory = scope.Resolve<Func<int, MyType>>();

var myObject = myObjectFactory(dummy);

Delegate Factories也可以提供帮助

标签:dependency-injection,c,inversion-of-control,autofac
来源: https://codeday.me/bug/20191121/2053691.html