2016-11-09 3 views
0

Есть ли какой-либо аналог «ObjectFactory.GetInstance» в контейнере LightInject IoC?ObjectFactory.GetInstance analog in LightInject IoC container

Например, мне нужно разрешить интерфейс в моем пользовательском атрибуте behaivour, который наследуется от IServiceBehavior, но по умолчанию мне не нужен интерфейс.

public class MyInspectorAttribute : Attribute, IOperationBehavior, IParameterInspector, IServiceBehavior 
{ 
    public IExternalService ExternalServiceInstance { get; set; } //always null 

    public void AddBindingParameters(OperationDescription operationDescription, BindingParameterCollection bindingParameters) { } 

    public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation) { } 

    public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation) 
    { 
     dispatchOperation.ParameterInspectors.Add(this); 
    } 

    public void Validate(OperationDescription operationDescription) { } 

    public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState) 
    { 
     Console.WriteLine("Operation {0} returned: result = {1}", operationName, returnValue); 
    } 
} 

public class CompositionRoot : ICompositionRoot 
{ 
    public void Compose(IServiceRegistry serviceRegistry) 
    { 
     serviceRegistry.Register<IService1, Service1>(); 
     serviceRegistry.Register<IExternalService,ExternalService>(); 
    } 
} 
+0

В чем проблема? Почему вы не можете хранить ссылку на контейнер LightInject в 'static'' public', чтобы вы могли получить доступ к нему из вашего атрибута? – Steven

+0

Не могли бы вы привести пример, пожалуйста – VoimiX

ответ

0

Я автор LightInject, и я боюсь, что вы предоставили слишком мало информации о том, что вы пытаетесь сделать. Если это связано с WCF, создайте проблему в репозитории LightInject.Wcf (https://github.com/seesharper/LightInject.Wcf) и предоставите простой «рабочий» пример того, что вы пытаетесь сделать.