c# - 解析类型时Unity执行方法

标签 c# unity-container

我想使用 Unity 执行一个方法来返回一个实例,每次解析类型时都应将其注入(inject)构造函数。

即在下面的示例中,InitializeTest() 仅执行一次,即在定义 injectionContructor 时执行。理想情况下,它应该执行两次,每次 ITestClass 被解析时执行一次。

public interface ITestClass
{
    public string GetMyNumber();
}

public class TestClass : ITestClass
{
    private int _myNumber;
    public TestClass(int myNumber)
    {
        _myNumber = myNumber;
    }

    public string GetMyNumber()
    {
        return String.Format("My number is: {0}", _myNumber);
    }
}

public class Controller
{
    UnityContainer _container;
    public Controller()
    {
        InitializeContainer();
    }

    public void InitializeContainer()
    {
        if(_container == null)
            _container = new UnityContainer();

        container.RegisterType<ITestClass>(new TransientLifetimeManager(), new InjectionConstructor(InitializeTest()));
    }

    public int InitializeTest()
    {
        return new Random().Next(100);
    }

    public void ExecuteController()
    {
        ITestClass class1 = _container.Resolve<ITestClass>();
        ITestClass class2 = _container.Resolve<ITestClass>();

        // both statements below print the same number
        Console.WriteLine(class1.GetMyNumber());
        Console.WriteLine(class2.GetMyNumber());
    }
}

最佳答案

我认为您可以在从容器解析实例时使用 ParameterOverride。

ITestClass class1 = container.Resolve<ITestClass>(
    new ParameterOverride("myNumber", InitializeTest());

ITestClass class2 = container.Resolve<ITestClass>(
    new ParameterOverride("myNumber", InitializeTest());

您还应该只创建 Random 类的一次实例并重用它。否则你也会得到相同的数字。

private Random _random = new Random();

public int InitializeTest()
{
    return _random.Next(100);
}

关于c# - 解析类型时Unity执行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17023940/

相关文章:

C# 从子类中获取详细信息

c# - 如何使用 MongoDB 访问深层嵌套数组(ASP.NET Core 2.2)

c# - URL 的正则表达式问题

c# - Windows 10 11 月更新后 Active Directory ValidateCredentials 中断

unity-container - 使用哪一个 : unity interception or policy injection

c# - Unity 在向 OWIN 添加 Active Directory 访问权限时尝试实例化枚举参数

mvvm - 带有 Prism 4 的新 LOB Silverlight 4(mvvm、mef、unity)

c# - 使用 Microsoft Unity 进行异步/等待

c# - Unity.ResolutionFailedException - 依赖项解析失败

C# 将 csv 转换为 xls(使用现有的 csv 文件)