{"id":2490,"date":"2016-09-27T10:00:26","date_gmt":"2016-09-27T08:00:26","guid":{"rendered":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?p=2490"},"modified":"2018-07-18T11:29:59","modified_gmt":"2018-07-18T09:29:59","slug":"sharepoint-framework-inyeccion-dependencias","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-framework-inyeccion-dependencias\/","title":{"rendered":"SharePoint FrameWork: Inyecci\u00f3n de Dependencias"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3244\" src=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/09\/Inyecci\u00f3n-de-dependencias.jpg\" alt=\"\" width=\"1186\" height=\"1009\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/09\/Inyecci\u00f3n-de-dependencias.jpg 1186w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/09\/Inyecci\u00f3n-de-dependencias-300x255.jpg 300w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/09\/Inyecci\u00f3n-de-dependencias-768x653.jpg 768w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/09\/Inyecci\u00f3n-de-dependencias-1024x871.jpg 1024w\" sizes=\"auto, (max-width: 1186px) 100vw, 1186px\" \/><\/p>\n<p>Una de las novedades que trae el nuevo FrameWork es que <strong>podemos saber cu\u00e1l es el entorno en el que se est\u00e1 ejecutando nuestro desarrollo<\/strong>. De esta forma, podemos ejecutar el WorkBench\u00a0en local, o bien en un Tenant de Office 365. A la hora de programar, es mucho m\u00e1s r\u00e1pido en un entorno en el que nos centremos en el desarrollo y no en pelearnos con autenticaci\u00f3n, seguridad, etc.. Por este motivo, en WorkBench o entorno de NodeJS, es muy importante \u00a0esta nueva forma de desarrollar. Crearemos Mocks de tal forma que podamos probar nuestros desarrollos de una forma desacoplada a SharePoint y agilizando el desarrollo.<\/p>\n<p><!--more--><\/p>\n<p>Todo esto esta suena muy bien, pero tal y como lo plantean en el ejemplo del <a href=\"http:\/\/dev.office.com\/sharepoint\/docs\/spfx\/web-parts\/get-started\/connect-to-sharepoint\" target=\"_blank\" rel=\"noopener\">Repositorio de GitHub<\/a>, en mi modesta opini\u00f3n,\u00a0<strong>no est\u00e1 bien enfocado,\u00a0<\/strong>ya que lo que hace es hablar de\u00a0\u00a0una duplicidad de m\u00e9todos. Esta duplicidad, en un \u00abHello World\u00bb se puede permitir, sin embargo, no es una buena opci\u00f3n materializarlo en proyecto real.<\/p>\n<p>Por poner un s\u00edmil con un desarrollo en C#, no es lo mismo poner directivas de compilaci\u00f3n, \u00a0que hacer <strong>inyecci\u00f3n de dependencias<\/strong>. En JavaScript, aunque mucha gente lo desconozca, se puede hacer inyecci\u00f3n de dependencias. Por ejemplo, Angular utiliza mucho la inyecci\u00f3n de dependencias para su correcto funcionamiento.<\/p>\n<p>Para desarrollar en SharePoint FrameWork, utilizamos un lenguaje\u00a0 TypeScript para\u00a0 aprovechar todo lo que nos da este lenguaje y simplificar el desarrollo. Por este motivo vamos a utilizar Interfaces e inyecci\u00f3n de dependencias en los constructores de las clases, de una forma muy similar a lo que hacemos en C#. <strong>La idea no es hacer de TypeScript un lenguaje como C#,<\/strong> sino intentar <strong>seguir los principios SOLID<\/strong> a la hora de programar y tratar de hacer bien las cosas.<\/p>\n<p>Vamos a ver un ejemplo de c\u00f3mo plantear la soluci\u00f3n que comentan en el <strong>Repositorio de SharePoint, pero utilizando Inyecci\u00f3n de Dependencias<\/strong>. Por si alguien no se quiere leer el art\u00edculo del repositorio, lo que se hace en el ejemplo de GitHub es una parte en el entorno de Test, y otra\u00a0 dentro del Tenant de Office 365\/SharePoint Online. \u00c9sta, seg\u00fan mi opini\u00f3n, no es la forma correcta, ya que al ser dos \u00abcontratos\u00bb totalmente distintos, puede darse el caso que el c\u00f3digo de Test funcione, pero en Producci\u00f3n no.<\/p>\n<p>Vamos a implementar ese \u00abContrato\u00bb para que nuestra aplicaci\u00f3n se comporte igual, tanto si est\u00e1s en Test, como si est\u00e1s en Office 365. Para ello, en primer lugar se implementa\u00a0una Interfaz que se encargar\u00e1 de hacer las consultas a SharePoint.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { ISPLists} from &quot;.\/IList&quot;;\r\nexport interface ISharePoint {\r\n    getList(): Promise&lt;ISPLists&gt;;\r\n}\r\n<\/pre>\n<p><strong>Nota:<\/strong> El atributo <em>export<\/em>, es similar al <em>public<\/em> de C#. El<em> import<\/em>, es similiar a los <em>using<\/em> de C#.\u00a0Una vez tenemos la interfaz, \u00a0vamos a crear dos clases que implementen esta interfaz. Por un lado, implementaremos una clase de Mock y por otro lado, implementaremos una clase con los accesos a SharePoint (para ello utilizaremos la librer\u00eda de PnP como veremos m\u00e1s adelante).<\/p>\n<p>Clase MockSharePoint<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport {ISharePoint} from &quot;.\/ISharePoint&quot;;\r\nimport {ISPLists,ISPList} from &quot;.\/IList&quot;;\r\nimport MockHttpClient from &quot;.\/MockHttpClient&quot;;\r\nexport class MockSharePoint implements ISharePoint\r\n{\r\n  Url:string;\r\n  constructor(url:string){\r\n    this.Url=url;\r\n  }\r\n   getList(): Promise&lt;ISPLists&gt; {\r\n    return MockHttpClient.get(this.Url)\r\n            .then((data: ISPList&#x5B;]) =&gt; {\r\n                var listData: ISPLists = { value: data };\r\n                return listData;\r\n            }) as Promise&lt;ISPLists&gt;;\r\n      }\r\n}\r\n<\/pre>\n<p>Clase PnPSharePoint<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport {ISharePoint} from &quot;.\/ISharePoint&quot;;\r\nimport {ISPLists,ISPList} from &quot;.\/IList&quot;;\r\nimport pnp from &quot;sp-pnp-js&quot;;\r\n\r\nexport class PnPSharePoint implements ISharePoint {\r\nUrl:string;\r\nconstructor(url:string){\r\nthis.Url=url;\r\n}\r\n  getList(): Promise&lt;ISPLists&gt; {\r\n\r\n   return pnp.sp.web.lists.getByTitle(&quot;Documents&quot;).items.get().then((data: ISPList&#x5B;]) =&gt; {\r\n                var listData: ISPLists = { value: data };\r\n                return listData;\r\n            }) as Promise&lt;ISPLists&gt;;\r\n  }\r\n}\r\n<\/pre>\n<p>Una vez implementadas las clases que vamos a utilizar, el siguiente paso es crear una clase (la que vamos a llamar en el arranque del WebPart, en la que nosotros le inyectemos el entorno en el que estamos). En C#, nosotros utilizar\u00edamos una herramientas como AutoFact, Unity, Castle, etc. En JavaScript hay FrameWorks que lo implementan de serie, como he comentado anteriormente. En nuestro caso, al NO utilizar ning\u00fan FrameWork, lo haremos de forma m\u00e1s artesana.<\/p>\n<p>Para ello, implementaremos la clase Render, a la que llamaremos en el momento de la carga de nuestro WebPart:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nexport class Render{\r\nSharePoint:ISharePoint;\r\nRenderPrint: Element;\r\npublic constructor(sharePoint:ISharePoint, renderPrint:Element)\r\n{\r\n  this.SharePoint=sharePoint;\r\n  this.RenderPrint=renderPrint;\r\n}\r\n\r\npublic RenderList() {\r\n\r\n    this.SharePoint.getList().then(\r\n      (response) =&gt; {\r\n      this._renderList(response.value);\r\n        });\r\n}\r\nprivate _renderList(items: ISPList&#x5B;]): void {\r\n    let html: string = &quot;&quot;;\r\n    items.forEach((item: ISPList) =&gt; {\r\n        html += `\r\n        &lt;ul &gt;\r\n            &lt;li class=&quot;${styles.listItem}&quot;&gt;\r\n                &lt;span class=&quot;ms-font-l&quot;&gt;${item.Title}&lt;\/span&gt;\r\n            &lt;\/li&gt;\r\n        &lt;\/ul&gt;`;\r\n    });\r\n    this.RenderPrint.innerHTML = html;\r\n}\r\n}\r\n<\/pre>\n<p>Si os fij\u00e1is, en el constructor de la clase tiene dos par\u00e1metros: la Interfaz que hemos implementado y el elemento en el cual vamos a pintar el HTML.<\/p>\n<p>Por \u00faltimo, lo que haremos en el m\u00e9todo Render del WebPart que estamos implementando, es crear una clase de tipo Render. Dependiendo del entorno en el que nos encontremos, crearemos una clase de tipo Mock o de tipo PnP. Quedar\u00eda de la siguiente forma:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n if (this.context.environment.type === EnvironmentType.Local) {\r\n       this.fly= new Render(new MockSharePoint(this.context.pageContext.web.absoluteUrl),this.domElement.querySelector('#spListContainer'));\r\n    }\r\n    else{\r\n     this.fly= new Render( new PnPSharePoint(this.context.pageContext.web.absoluteUrl),this.domElement.querySelector('#spListContainer'));\r\n    }\r\n this.fly.RenderList();\r\n<\/pre>\n<h2>Resumen<\/h2>\n<p>En SharePoint, tradicionalmente a nivel de desarrollo siempre se ha criticado que los desarrolladores no segu\u00edan las buenas practicas ni recomendaciones del Lenguaje. En ocasiones se echaba la culpa a la propia peculiaridad de SharePoint. Sin embargo, esto no es excusa para al menos no intentar hacer las cosas bien.<\/p>\n<p>Ahora, con el cambio de habilidades de los desarrolladores de SharePoint, no debemos\u00a0seguir con los errores del pasado y tenemos que seguir las buenas pr\u00e1cticas\u00a0 y recomendaciones del lenguaje que utilicemos. \u00c9ste es un caso de mala utilizaci\u00f3n del lenguaje y que apoya las palabras de los cr\u00edticos de SharePoint.<\/p>\n<p>El c\u00f3digo fuente de este ejemplo lo pod\u00e9is encontrar en el siguiente repositorio de GitHub:<br \/>\n<a href=\"https:\/\/github.com\/AdrianDiaz81\/DemosBlog\/tree\/master\/PNPCore\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-2377\" src=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/07\/github-1024x380.png\" alt=\"github\" width=\"1024\" height=\"380\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/07\/github-1024x380.png 1024w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/07\/github-300x111.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/07\/github-768x285.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/07\/github.png 1125w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"<p>Una de las novedades que trae el nuevo FrameWork es que podemos saber cu\u00e1l es el entorno en el que se est\u00e1 ejecutando nuestro desarrollo. De esta forma, podemos ejecutar el WorkBench\u00a0en local, o bien en un Tenant de Office &hellip; <a href=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-framework-inyeccion-dependencias\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[100,113],"tags":[19,26],"class_list":["post-2490","post","type-post","status-publish","format-standard","hentry","category-javascript-2","category-office-365-2","tag-javascript","tag-sharepoint"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>SharePoint FrameWork: Inyecci\u00f3n de Dependencias - Desarrollando sobre SharePoint<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-framework-inyeccion-dependencias\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"SharePoint FrameWork: Inyecci\u00f3n de Dependencias - Desarrollando sobre SharePoint\" \/>\n<meta name=\"twitter:description\" content=\"Una de las novedades que trae el nuevo FrameWork es que podemos saber cu\u00e1l es el entorno en el que se est\u00e1 ejecutando nuestro desarrollo. De esta forma, podemos ejecutar el WorkBench\u00a0en local, o bien en un Tenant de Office &hellip; Continue reading &rarr;\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/09\/Inyecci\u00f3n-de-dependencias.jpg\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adri\u00e1n D\u00edaz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-framework-inyeccion-dependencias\\\/#article\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-framework-inyeccion-dependencias\\\/\"},\"author\":{\"name\":\"Adri\u00e1n D\u00edaz\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"headline\":\"SharePoint FrameWork: Inyecci\u00f3n de Dependencias\",\"datePublished\":\"2016-09-27T08:00:26+00:00\",\"dateModified\":\"2018-07-18T09:29:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-framework-inyeccion-dependencias\\\/\"},\"wordCount\":1099,\"commentCount\":0,\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-framework-inyeccion-dependencias\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2016\\\/07\\\/github-1024x380.png\",\"keywords\":[\"JavaScript\",\"sharepoint\"],\"articleSection\":[\"javascript\",\"Office 365\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-framework-inyeccion-dependencias\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-framework-inyeccion-dependencias\\\/\",\"url\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-framework-inyeccion-dependencias\\\/\",\"name\":\"SharePoint FrameWork: Inyecci\u00f3n de Dependencias - Desarrollando sobre SharePoint\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-framework-inyeccion-dependencias\\\/#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-framework-inyeccion-dependencias\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2016\\\/07\\\/github-1024x380.png\",\"datePublished\":\"2016-09-27T08:00:26+00:00\",\"dateModified\":\"2018-07-18T09:29:59+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-framework-inyeccion-dependencias\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint-framework-inyeccion-dependencias\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2016\\\/07\\\/github.png\",\"contentUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2016\\\/07\\\/github.png\",\"width\":1125,\"height\":417},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/\",\"name\":\"Desarrollando sobre SharePoint\",\"description\":\"Arquitectura, buenas pr\u00e1cticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\",\"name\":\"Adri\u00e1n D\u00edaz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"caption\":\"Adri\u00e1n D\u00edaz\"},\"description\":\"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/author\\\/desarrollandosobresharepoint\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SharePoint FrameWork: Inyecci\u00f3n de Dependencias - Desarrollando sobre SharePoint","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-framework-inyeccion-dependencias\/","twitter_card":"summary_large_image","twitter_title":"SharePoint FrameWork: Inyecci\u00f3n de Dependencias - Desarrollando sobre SharePoint","twitter_description":"Una de las novedades que trae el nuevo FrameWork es que podemos saber cu\u00e1l es el entorno en el que se est\u00e1 ejecutando nuestro desarrollo. De esta forma, podemos ejecutar el WorkBench\u00a0en local, o bien en un Tenant de Office &hellip; Continue reading &rarr;","twitter_image":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/09\/Inyecci\u00f3n-de-dependencias.jpg","twitter_misc":{"Escrito por":"Adri\u00e1n D\u00edaz","Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-framework-inyeccion-dependencias\/#article","isPartOf":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-framework-inyeccion-dependencias\/"},"author":{"name":"Adri\u00e1n D\u00edaz","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"headline":"SharePoint FrameWork: Inyecci\u00f3n de Dependencias","datePublished":"2016-09-27T08:00:26+00:00","dateModified":"2018-07-18T09:29:59+00:00","mainEntityOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-framework-inyeccion-dependencias\/"},"wordCount":1099,"commentCount":0,"image":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-framework-inyeccion-dependencias\/#primaryimage"},"thumbnailUrl":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/07\/github-1024x380.png","keywords":["JavaScript","sharepoint"],"articleSection":["javascript","Office 365"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-framework-inyeccion-dependencias\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-framework-inyeccion-dependencias\/","url":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-framework-inyeccion-dependencias\/","name":"SharePoint FrameWork: Inyecci\u00f3n de Dependencias - Desarrollando sobre SharePoint","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website"},"primaryImageOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-framework-inyeccion-dependencias\/#primaryimage"},"image":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-framework-inyeccion-dependencias\/#primaryimage"},"thumbnailUrl":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/07\/github-1024x380.png","datePublished":"2016-09-27T08:00:26+00:00","dateModified":"2018-07-18T09:29:59+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-framework-inyeccion-dependencias\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint-framework-inyeccion-dependencias\/#primaryimage","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/07\/github.png","contentUrl":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2016\/07\/github.png","width":1125,"height":417},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/","name":"Desarrollando sobre SharePoint","description":"Arquitectura, buenas pr\u00e1cticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb","name":"Adri\u00e1n D\u00edaz","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","caption":"Adri\u00e1n D\u00edaz"},"description":"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/author\/desarrollandosobresharepoint\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/2490","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/comments?post=2490"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/2490\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/media?parent=2490"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/categories?post=2490"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/tags?post=2490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}