Может кто-нибудь помочь мне преобразовать эту регистрацию AutoFac в Виндзор? - PullRequest
0 голосов
/ 22 марта 2012
containerBuilder
    .Register<IGraphClient>(context =>
    {
        var graphClient = new GraphClient(new Uri("http://localhost:9999/db/data"));
        graphClient.Connect(); // Particularly this line
        return graphClient;
    })
    .SingleInstance();

Хотя я могу понять, как регистрировать интерфейсы для конкретных классов, этот конкретный класс должен быть единичным экземпляром (я уверен, что это LifeStyle.Singleton), а также вызывать метод graphClient.Connect (),Это основная часть, на которой я застрял.

Основываясь на ответе JeffN825, я сделал это:

container.Register(
                Component.For(
                    typeof (IGraphClient))
                    .ImplementedBy(typeof (GraphClient))
                    .LifeStyle.Singleton.UsingFactoryMethod(() =>
                                                                {
                                                                    var graphClient = new GraphClient(new Uri("http://localhost:7474/db/data"));
                                                                    graphClient.Connect();
                                                                    return graphClient;
                                                                }));

1 Ответ

0 голосов
/ 22 марта 2012

Вы можете использовать метод ComponentRegistration<T>.UsingFactoryMethod<T>, который принимает делегат (Func), если вы хотите самостоятельно управлять созданием экземпляра (что также даст вам возможность вызвать Connect).

...