Autofac Cio metodo GetInstance

Sto cercando di utilizzare autofac nel mio progetto. Così nel Mef ho potuto ottenere l’istanza di un’interfaccia con questo codice:

private static CompositionContainer _container;

        public static void Initialize()
        {
            string path = AppDomain.CurrentDomain.BaseDirectory.Contains(@"\bin") ?
                AppDomain.CurrentDomain.BaseDirectory :
                Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin");

            //DirectoryCatalog catalog = new DirectoryCatalog(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"), "*.Data*.dll");
            DirectoryCatalog catalog = new DirectoryCatalog(path, "*.dll");
            _container = new CompositionContainer(catalog);
            _container.ComposeParts();
        }

        private static void CheckContainer()
        {
            if (_container == null)
            {
                Initialize();
            }
        }

        public static T GetInstance<T>()
        {
            CheckContainer();

            return _container.GetExportedValue<T>(); 
        }

Ma autofac sembra di confusione per me… Come posso aggiungere questa funzionalità per la mia app utilizzando autofac?

Grazie


Ho modificato il codice in questo modo:

private static ContainerBuilder _container;
        private static IContainer container;

        public static void Initialize()
        {
            _container = new ContainerBuilder();
            var logging = Assembly.Load("StarlightFramework.Logging");
            _container.RegisterAssemblyTypes(logging);
            container = _container.Build();

        }

        public static T GetInstance<T>()
        {
            if(container == null)
                Initialize();
            return container.Resolve<T>();
        }

Ma mi da questo errore questo momento: “impossibile caricare il file o l’assembly ‘Autofac, Version=2.6.1.841, Culture=neutral, PublicKeyToken=17863af14b0044da’ o una delle relative dipendenze. “

Quale potrebbe essere il problema?

InformationsquelleAutor mehmetserif | 2012-05-04



2 Replies
  1. 9

    Prima devi costruire il tuo contenitore e registrare i vostri servizi.

    var builder = new ContainerBuilder();
    builder.RegisterType<MyService>().As<IMyService>(); 
    var container = builder.Build();

    Allora si può ottenere un’istanza di un servizio registrato utilizzando il Resolve metodo di estensione.

    var service = container.Resolve<IMyService>();
    • Beh, ho provato questo metodo, ma ho ottenuto un errore: “ILogger non è stato registrato. registrare una componente di fornire il servizio di controllo per la registrazione al servizio utilizzando IsRegistered(), o utilizzare il ResolveOptional() metodo per risolvere una dipendenza opzionale.”. Ma mi registro “ILogger”. Che cosa manca?
    • Post un po ‘ di codice come si sta registrando ILogger.
  2. 1

    Assicurarsi che il Autofac.dll il montaggio è presente in nella cartella bin dell’applicazione e che l’assemblea ha la stessa versione di quello usato da StarlightFramework.Registrazione.

Lascia un commento