Implementing OnePerSessionBehavior in NInject

前端 未结 2 657
执笔经年
执笔经年 2021-01-21 14:54

I\'d like to create a OnePerSessionBehavior for NInject (v1.0) and I\'ve mostly got it working. The only issue that remains is how to pass in fresh arguments using .WithArgumen

相关标签:
2条回答
  • 2021-01-21 15:33

    Can you pass a lamda as your argument? For instance, if you have a class like this:

    public class Something : ISomething
    {
        public Something(Action<DateTime> initializer)
        {
            var now = initializer();
        }
    }
    

    You can bind it as follows:

    Bind<ISomething>()
        .To<Something>()
        .Using<OnePerSessionBehavior>()
        .WithArgument("initializer", () => { return DateTime.Now; });
    

    Though I don't know you exact situation, another idea would be to create your object without worrying about argument injection, and then set your properties:

    kernel.Bind<ISomething>().To<Something>().Using<OnePerSessionBehavior>();    
    var mySomething = kernel.Get<Something>();
    mySomething.DateCreated = DateTime.Now;
    

    or:

    mySomething.Initialize(DateTime.Now);
    

    Would either of those ideas work?

    0 讨论(0)
  • 2021-01-21 15:44

    You're passing a value that's evaluated during the definition of the binding. That's why you get the same value over and over again. Actually from the top of my head I don't have an easy answer to that but I'll definitely think about it as it might be useful for testing purposes for me to.

    0 讨论(0)
提交回复
热议问题