Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The answer is yes!
OK let me explain. I never registered anything as Func<IObservable<object>> and yet the below code still works. It turns out to be that not only does autofac understand Func<Dependency>(), it understands a whole bunch of things that you may or may not have intended to be dependency relationships. :)
The details [Copied straight from https://autofac.readthedocs.org/en/latest/resolve/relationships.html\]
B |
Direct Dependency | |
A needs B at some point in the future | Lazy<B> |
Delayed Instantiation |
A needs B until some point in the future | Owned<B> |
Controlled Lifetime |
A needs to create instances of B | Func<B> |
Dynamic Instantiation |
A provides parameters of types X and Y to B | Func<X,Y,B> |
Parameterized Instantiation |
A needs all the kinds of B | IEnumerable<B> , IList<B> , ICollection<B> |
Enumeration |
A needs to know X about B | Meta<B> and Meta<B,X> |
Metadata Interrogation |
A needs to choose B based on X | IIndex<X,B> |
So now I know!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autofac;
namespace IsAutoFacMagical
{
class CO : IObservable<object>
{
public IDisposable Subscribe(IObserver<object> observer)
{
throw new NotImplementedException();
}
}
class DO
{
public Func<IObservable<object>> Magic { get; set; }
}
class Program
{
static void Main(string[] args)
{
var cb = new ContainerBuilder();
cb.RegisterType<CO>().As<IObservable<object>>();
cb.RegisterType<DO>().PropertiesAutowired();
var x = cb.Build();
var d = x.Resolve<DO>();
var m1 = d.Magic();
}
}
}